我已经得到了有许多项目的用户模型。甲评分属于一个用户和一个项目。

在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不知道用户什么,除非你告诉它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top