为什么没有这种关联创建工作随叫随到?
-
21-08-2019 - |
题
我已经得到了有许多项目的用户模型。甲评分属于一个用户和一个项目。
在DB中,我已设置ratings.user_id为不NULL。
当我创建一个项目,我想做到这一点:
def create
current_user.items.create(params[:item]).ratings.create(params[:rating]
redirect_to items_path
end
然而,这不太愿意与SQL错误 “USER_ID不能是nil”
,所以我改写了创建方法
def create
current_user.items.create(params[:item]).ratings.create(params[:rating].merge({:user_id => current_user}))
redirect_to items_path
end
,工作正常。
不过,我原以为链接的创建方法注销当前用户的接收器会填充等级的USER_ID。任何人都知道为什么不呢?
TIA。
解决方案
我建议你如果可能的话在数据库规范化这一点。也许从额定值表中取出USER_ID属性,如果你需要在你的模型,通过把它联接使用:通过方法
class Rating
has_many :items
has_one :user, :through=>:items
其他提示
如果您创建并保存的项目,然后从项目作了评价,它不会通过用户一起的评级,对不对?你只是称其为@ rating.item.user,对吧?
当你想想看这样,你不会指望通过CURRENT_USER创建的项目沿的评级传递用户的信息。
让我知道如果你真的需要用户的has_many收视率的关系。
由于项目有很多等级和公会不知道用户ID。考虑到,因为它属于一个用户的关联链项目将有一个用户ID。而且,因为它属于一个项目评级将有一个项目ID。但该项目,以评价ASSOCATION不知道用户什么,除非你告诉它。
不隶属于 StackOverflow