В одной из моих моделей, я звонюfirst_or_initialize вызова блок, даже если строка найдена
puts where(field: value).first
where(field: value).first_or_initialize.tap do |row|
# . . . Actual creation and saving omitted
end
Я запустить его несколько раз только, чтобы проверить его, и блок продолжает работать, даже будучи хотя я может ясно видеть, что это не должно быть (потому что puts
печатает найденную строку и потому, что в базе есть что-то в основе). Я также знаю, что блок вызывается, потому что у меня есть пропущенный puts
, и SQL вызывает обновления.
Почему это? Как я могу это исправить?
['first_or_initialize'] (http://apidock.com/rails/v4.2.1/ActiveRecord/Relation/first_or_initialize) делает именно это. Если он найдет запись, он что-то сделает с ней, иначе она создаст новую запись и что-то с ней сделает. –