我有一个表A(:name,:flag),如果某个条件的计算结果为true,则想要更新表中记录的标志列。
if A.find(300).flag == false
//Will this work -> A.find(300).flag = true
我应该在那条线上写什么?
答案 0 :(得分:0)
if A.find(300).flag == false
//Will this work -> A.find(300).flag = true
更改为
A.find(300).update(flag: true) if A.find(300).flag == false
您可以将方法添加到a.rb
def self.update_if_false id
find(id).update(flasg: true) if A.find(id).flag == false
end
然后您可以将其用作A.update_if_false(300)
答案 1 :(得分:0)
如果flag为true,这将减少数据库调用:
Rails 4:
obj = A.find(300)
obj.update(flag: true) unless obj.flag
Rails 3.2:
obj = A.find(300)
obj.update_attributes(flag: true) unless obj.flag
注意:update
方法在活动记录4中使用update_attributes公开并使用别名。
答案 2 :(得分:0)
是的......它会起作用...我在ruby2.0控制台中试过.. 假设你有所有属性....
2.0.0-p481 :026 > Image.find(30).title = true
Image Load (7.8ms) SELECT "images".* FROM "images" WHERE "images"."id" = $1 LIMIT 1 [["id", 30]]
=> true
你可以继续添加你的更新声明..如果是其他错误。
if A.find(300).flag == false
##do something
else
##do other thing
end