我在基于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')
答案 0 :(得分:1)
"checkout"
使用:checkout
或update_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