У меня есть оператор 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
] Что мне делать?