我有
@user = User.find(1)
@event = Event.find(1)
for interest in @event.interests
@user.choices.create(:interest => interest, :score => 1)
end
正常工作但每次都会创建记录。我想检查是否存在来自for循环的具有相应interest_id的记录,如果它存在,我想更新,否则创建就好了。
我环顾四周,找到了“find_or_create_by”方法,但它并不适合我。我有=>
@user.choices.find_or_create_by_interest(:interest => interest.id, :score => 1)
并获取错误“undefined method`find_by_interest'”。
你能看出我做错了什么吗?或者坚持使用if / else语句会更好吗?我不确定find_or_create_by方法是否具有更新属性功能。
答案 0 :(得分:6)
再一次,您应该find_or_create_by_interest_id_and_score
答案 1 :(得分:2)
如果我没有误解你想要达到的目的,那就是:
find_or_create_by_interest_id(:interest => interest.id) { |u| u.score = 1 }