更新rails中的表中的记录

时间:2015-04-01 08:56:28

标签: ruby-on-rails ruby-on-rails-3 postgresql

我有一个表A(:name,:flag),如果某个条件的计算结果为true,则想要更新表中记录的标志列。

if A.find(300).flag == false
 //Will this work -> A.find(300).flag = true

我应该在那条线上写什么?

3 个答案:

答案 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