Rails 4:ActiveRecord :: StatementInvalid,update_all()行为不一致

时间:2015-12-21 19:20:16

标签: ruby ruby-on-rails-4 activerecord

我在基于Rails 4的应用中的class_controller中有以下两种方法:

结帐(), 签()

这两个方法执行的数据库操作相反:checkout()将字符串值插入checkout字段/列,而checkin()从{{1}中删除字符串值} field / column。

两种方法中的代码非常相似:

checkout

当urin()方法抛出以下错误时,对url映射的checkout()的调用完美无缺。看起来def checkout @class = Class.where("id = ?", params[:class_id]) @class.update_all(":checkout" => "done blah blah") end def checkin @class = Class.where("id = ?", params[:class_id]) @class.update_all(":checkout" => "") # set it empty or nil?? end 方法行为不一致:

PG :: UndefinedColumn:错误:关系“类”的列“:checkout”不存在第1行:UPDATE“classes”SET“:checkout”=''WHERE(id ='1')^ :UPDATE“classes”SET“:checkout”=''WHERE(id ='1')

2 个答案:

答案 0 :(得分:1)

"checkout"使用:checkoutupdate_all

 @class.update_all(:checkout => "done blah blah")
在Ruby中

Symbols不必引用。

答案 1 :(得分:1)

我很惊讶您说第一个版本有效。如果没有名为:checkout的列,它也应该失败。

我建议将两个版本“修复”为更常见的Ruby习语:

def checkout
  @class = Class.where(id: params[:class_id])
  @class.update_all(checkout: 'done blah blah')
end

def checkin
  @class = Class.where(id: params[:class_id])
  @class.update_all(checkout: '')  # set it empty or nil?
end