Rails - 创建或更新记录....如果语句与查找或创建

时间:2011-01-07 00:23:29

标签: ruby-on-rails

我有

@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方法是否具有更新属性功能。

2 个答案:

答案 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 }