Обновить запись в таблице в рельсах
У меня есть таблица 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.