есть ли способ узнать, является ли запись новой после того, как она была создана с помощью find_or_create_by - PullRequest
2 голосов
/ 02 декабря 2011

Я использую этот код:

item = Item.find_or_create_by(:name => title.strip)
if item.changed?
   results.newItemsCount += 1
end

Я хочу получить количество вновь созданных записей для регистрации.Я надеялся, что свойство .changed будет истинным для вновь создаваемых элементов, но похоже, что это не так.Следующая часть кода может изменить элемент, даже если он не новый, поэтому мне действительно нужно знать, является ли элемент новым.

Есть ли способ узнать, является ли запись новой или нет?Ничего подобного не видел в документах .Можно подумать, что просто установка заголовка (в конструкторе) будет квалифицироваться как измененная, но, похоже, этого не произойдет.

1 Ответ

6 голосов
/ 06 декабря 2011

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

Вместо этого вы можете сделать это с помощью find_or_initialize_by.Здесь вы можете проверить значение persisted?, чтобы определить, новый товар или нет.если значение false, то вы знаете, что это новый документ.

item = Item.find_or_initialize_by(:name => title.strip)
unless item.persisted?
   item.save 
   results.newItemsCount += 1
end

Другой способ - использовать обратный вызов after_create.если это новый элемент, этот обратный вызов будет запущен.И вы можете сделать свою операцию здесь.

Надеюсь, это поможет

...