1

我有一个包含许多项目的用户模型。评级属于用户和项目。

在数据库中,我将 rating.user_id 设置为不为 NULL。

当我创建一个项目时,我想这样做:

  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 

效果很好。

但是,我曾认为将创建方法链接到当前用户的接收器会填充评级的 user_id。有谁知道为什么不?

TIA。

4

3 回答 3

1

如果可能,我建议您在数据库中对此进行规范化。也许从评级表中取出 user_id 属性,如果您在模型中需要它,使用 :through 方法通过连接获取它

class Rating
    has_many :items
    has_one :user, :through=>:items
于 2009-02-05T21:50:57.450 回答
1

如果您创建并保存了该项目,然后对该项目进行评级,它不会将用户传递给评级,对吗?您只需将其称为@rating.item.user,对吗?

当您这样考虑时,您不会期望通过 current_user 创建的项目将用户信息传递给评级。

让我想知道您是否真的需要用户 has_many 评级关系。

于 2009-02-05T21:54:58.020 回答
0

因为 Item 有很多 Ratings 并且该关联不知道用户 ID。鉴于关联链 Item 将具有用户 ID,因为它属于用户。并且 Rating 会有一个项目 id,因为它属于一个项目。但是,除非您告诉它,否则 Item to Rating 关联对用户一无所知。

于 2009-02-05T21:43:46.077 回答