【问题标题】:Rails - Create or Update Record .... If statement vs find or create byRails - 创建或更新记录....如果语句与查找或创建
【发布时间】:2011-06-05 00:28:31
【问题描述】:

我有

@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) 

并得到错误“未定义的方法`find_by_interest'”。

你能看出我做错了吗?还是坚持使用 if/else 语句更好?

我不确定 find_or_create_by 方法是否具有更新属性功能。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    再一次,你应该这样做find_or_create_by_interest_id_and_score

    【讨论】:

    • 我得到错误...未知键:分数,兴趣???你以前见过这个吗?
    • find_or_create_by_interest_id_and_score(interest.id,1)。但当心!如果你有一个 id 好但分数错误的对象,它会尝试创建它并且会失败:你不能有两个具有相同 id 的对象。
    • 是的......这是一种方法,但它不会更新找到的记录......它只会在找不到记录时添加......我开始认为 if/else 语句可能是最好的选择
    【解决方案2】:

    如果我没有弄错你想要实现的方法是:

    find_or_create_by_interest_id(:interest => interest.id) { |u| u.score = 1 }
    

    【讨论】:

      猜你喜欢
      • 2013-09-26
      • 1970-01-01
      • 1970-01-01
      • 2013-07-28
      • 1970-01-01
      • 1970-01-01
      • 2017-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多