【发布时间】:2011-06-05 00:09:29
【问题描述】:
我对某些模型有一个 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 外键和 score 属性。
我试过了
@user.choices.find_or_create_by_user(:user => @user.id, :interest => interest, :score => 4)
但是得到了
未定义方法
find_by_user
我该怎么办?
【问题讨论】:
-
current_user 已经是 User 模型的实例了吗?如果是这样,您不需要重新找到它,只需使用
current_user而不是@user = ...。
标签: ruby-on-rails conditional-statements