我对 RoR 很陌生。一开始我用的是sqlite3数据库,后来迁移到mysql。在我向数据库中添加一条记录之前,我的应用程序一切正常。
我可以使用“irb”控制台更新我的新记录。 我的 Controller 中有一个函数是从更新记录的 python 脚本调用的。
函数如下:
# GET /dd_bots/update
# param name, att
def update
obj = Object.all
obj = obj.select{ |o| o.name == params[:name] }
obj[0].update_attribute(:att, params[:att])
head :ok
end
然而,此函数不会更新返回此错误的新添加的记录:NoMethodError (undefined method update_attribute' for nil:NilClass)
很明显记录好像没有找到...
你知道为什么会这样吗?
最佳答案
首先,不要调用您的模型 Object
:这可能会产生灾难性的后果,因为 Object
是 Ruby 中几乎每个对象的基类。
其次,update_attribute
在 obj
的第一个元素上被调用,它是一个数组。如果数组不包含任何元素,即如果没有名称与传递给 Controller 的名称参数相同的对象,则会出现该错误。
您可以通过一种不易出错的方式来执行此操作:
def update
obj = Object.find_by_name(params[:name])
obj.update_attribute(:att, params[:att]) if obj
head :ok
end
如果一条记录应该存在,如果它不存在,您可能想抛出一个异常。您可以通过将 !
添加到 find_by_name
方法来执行此操作:
obj = Object.find_by_name!(params[:name]) # Could throw an ActiveRecord::RecordNotFound
如果记录不存在,这样做的好处是给出 HTTP 404 状态代码,否则以相同的方式操作。
关于ruby-on-rails - rails 上的 ruby : controller can't access newly added record,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16544903/