2013-08-25 2 views
1

Не могу понять, как проверить, обновлена ​​ли запись. Прямо сейчас я используюПроверьте, не была ли вновь создана запись.

If @item.save 
     @a = Item.where(“restaurant_id = ?”, params[:item][:user_id]).where(“created_at < ?”, 2.minutes.ago) 

Запрос работает нормально, но мне интересно, если есть лучший способ проверить, если запись была просто создана. Я изучал ActiveModel :: Dirty, но как только запись сохраняется,: created_at_changed? вернет false.

+1

проверить этот вопрос + ответ: http://stackoverflow.com/questions/7842920/determine-if-activerecord-object-is- new-or-created – Mattherick

+0

Или даже http://stackoverflow.com/questions/7842920/determine-if-activerecord-object-is-new-or-created – msbarnard

ответ

1

Я не думаю, что рельсы предоставляют любой способ проверить это. Вы можете реализовать свои собственные.

def recently_created? 
    Item.where("restaurant_id = ? AND created_at < ?", params[:items][:user_id], 2.minuted.ago) 
end 

Если вы хотите его для всех моделей ActiveRecord, добавьте его в класс ActiveRecord :: Base.

+0

Спасибо за ответ и за исправление моего синтаксиса. – Ria

7

Для записи Rails 4 и 5 теперь обе имеют функциональность для этого.

В Rails 4, вы можете сделать:

@item.previous_changes.key?('id') 

И в Rails 5:

@item.id_previously_changed? 

[Примечание: Это предполагает, что вы никогда не вручную обновить идентификаторы ваших записей. Если вы, вам нужно что-то больше похоже на следующее:]

@item.previous_changes.key?('id') && @item.previous_changes['id'][0].nil? 
Смежные вопросы