У меня есть оператор 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
и атрибут Score.
Я пытался
@user.choices.find_or_create_by_user(:user => @user.id, :interest => interest, :score => 4)
но получил
неопределенный метод find_by_user
Что мне делать?