Обновить запись в таблице в рельсах

У меня есть таблица A(:name,:flag), и я хочу обновить столбец флага записи в таблице, если определенное условие оценивается как true.

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

Что я должен написать в этой строке?

3 ответа

Решение
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

Вы можете добавить метод в.rb

def self.update_if_false id
  find(id).update(flasg: true) if A.find(id).flag == false
end

Тогда вы можете использовать его как A.update_if_false(300)

Да.. это будет работать... я пытался в консоли 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 

Вы можете пойти дальше и добавить свое заявление об обновлении.. если true, то false.

if A.find(300).flag == false
  ##do something
else
  ##do other thing
end 

Это уменьшит вызов базы данных, если флаг равен true:

Рельсы 4:

obj = A.find(300)
obj.update(flag: true) unless obj.flag

Рельсы 3.2:

obj = A.find(300)
obj.update_attributes(flag: true) unless obj.flag

Замечания: update метод обнародован и имеет псевдоним update_attributes в активной записи 4.

Другие вопросы по тегам