В Rails, как лучше всего обновить записать или создать новый, если он не существует?

У меня есть оператор create для некоторых моделей, но он создает запись в таблице соединений независимо от того, существует ли уже запись.

Вот как выглядит мой код:

@user = User.find(current_user)
@event = Event.find(params[:id])
for interest in @event.interests
 @user.choices.create(:interest => interest, :score => 4)
end

Проблема в том, что он создает записи не важно что. Я бы хотел, чтобы он создавал запись только в том случае, если записи еще не существует; если запись действительно существует, я бы хотел, чтобы она взяла атрибут найденной записи и прибавила или вычитала 1.

Я поискал, увидел что-то под названием find_or_create_by . Что он делает, когда находит запись? Я хотел бы взять текущий атрибут : score и добавить 1.

Можно ли найти или создать по id ? Я не уверен, по какому атрибуту найду, поскольку рассматриваемая мной модель - это модель соединения, которая имеет только внешние ключи id и атрибут оценки.

Я пробовал

@user.choices.find_or_create_by_user(:user => @user.id, :interest => interest, :score => 4)

, но получил

undefined method find_by_user

] Что мне делать?

26
задан TRiG 24 September 2014 в 17:27
поделиться