У меня есть оператор 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
? Я не уверен, какой атрибут я найду, поскольку модель Im look at - это модель объединения, которая имеет только id
внешние ключи и атрибут оценки.
Я пробовал
@user.choices.find_or_create_by_user(:user => @user.id, :interest => interest, :score => 4)
но получил
undefined метод
find_by_user
Что мне делать?