Ruby on rails 为什么';这不是相关的创建呼叫工作吗?
我有一个用户模型,它有很多项。评级属于用户和项目 在DB中,我已将ratings.user_id设置为非空 创建项目时,我希望执行以下操作:Ruby on rails 为什么';这不是相关的创建呼叫工作吗?,ruby-on-rails,controller,associations,method-chaining,Ruby On Rails,Controller,Associations,Method Chaining,我有一个用户模型,它有很多项。评级属于用户和项目 在DB中,我已将ratings.user_id设置为非空 创建项目时,我希望执行以下操作: def create current_user.items.create(params[:item]).ratings.create(params[:rating] redirect_to items_path end 但是,这会遇到一个SQL错误“user_id不能为零” 因此,我将create方法重写为 def creat
def create
current_user.items.create(params[:item]).ratings.create(params[:rating]
redirect_to items_path
end
但是,这会遇到一个SQL错误“user_id不能为零”
因此,我将create方法重写为
def create
current_user.items.create(params[:item]).ratings.create(params[:rating].merge({:user_id => current_user}))
redirect_to items_path
end
这很好用
然而,我原以为将create方法与当前用户的接收者链接会填充评级的用户id。有人知道为什么吗
TIA。因为项目有很多评级,而该关联不知道用户id。给定关联链项目将具有用户id,因为它属于用户。评级将有一个项目id,因为它属于一个项目。但是,除非你告诉它,否则评级协会的项目对用户一无所知。如果可能的话,我建议你在数据库中对此进行规范化。也许可以从ratings表中删除user_id属性,如果您在模型中需要它,可以使用:through方法通过连接获得它
class Rating
has_many :items
has_one :user, :through=>:items
如果您创建并保存了该项目,然后根据该项目进行评分,则不会将用户传递给评分,对吗?您只需将其称为@rating.item.user,对吗 当您这样想时,您不会期望通过当前用户创建的项目将用户信息传递给评级
让我想知道你是否真的需要用户有很多评级关系。谢谢Jeremy。我来试试这个。我意识到这是一个新手问题。只是想知道:评级不属于一个项目,没有很多项目吗?是的,你是对的,我没有考虑太多,我只是想给你一行:通过例子我会做有很多:项目,:通过=>:评级。。。除非有原因。