Ruby on Rails:无法呈现嵌套属性

时间:2012-10-28 13:01:40

标签: ruby-on-rails ruby-on-rails-3 foreign-keys nested-attributes has-many-through

我希望能够向喜欢用户帖子的用户展示。我将提供一些简单的信息,因此这个问题不会让人不知所措。

我有三个课程:用户,分享和意见。他们的模型同样建立:

class User
  has_many :opinions, foreign_key: "fan_id", dependent: :destroy
end

class Share
  has_many :opinions, foreign_key: "like_id", dependent: :destroy
  has_many :likes, through: :opinions
  has_many :agreeables, foreign_key: "fan_id", class_name: "Opinion", dependent: :destroy
  has_many :fans, through: :agreeables
end

class Opinion
  belongs_to :fan, class_name: "User"
  belongs_to :like, class_name: "Share"
end

换句话说:like_id = share.id& fan_id = user.id

然后在我的控制器中:

SharesController
  def show
    @share = Share.find(params[:id])
    @shares = @share.fans.paginate(page: params[:page])
  end

我点击了share_path的链接,它会呈现页面但没有任何内容。当我查看我的SQL日志时,我注意到了问题:

让所呈现的共享(like_id)与喜欢该共享的用户(fan_ids)匹配,并非正确加入意见。

假设share.id为11而current_user.id为5.该查询主要包含内部加入意见,以使like_id AND {{1 }}

有关如何解决此问题或更实用的替代方法的任何想法?

感谢您的帮助。

修改

对于任何未来的读者,解决方案如下:

fan_id = 11

class User has_many :fans, foreign_key: "fan_id", class_name: "Opinion", dependent: :destroy end class Share has_many :opinions, foreign_key: "like_id", dependent: :destroy has_many :likes, through: :opinions has_many :fans, through: :opinions end 和意见模型保持不变。

1 个答案:

答案 0 :(得分:1)

如果您希望获得所有喜欢Share的用户,则以下代码就足够了:

class User
  has_many :opinions, foreign_key: "fan_id", dependent: :destroy
  has_many :shares, through: :opinions
end

class Share
  has_many :opinions, foreign_key: "like_id", dependent: :destroy
  has_many :fans, through: :opinions # I'm not sure, but you might need to add class_name option here
end

class Opinion
  belongs_to :fan, class_name: "User"
  belongs_to :like, class_name: "Share"
end

在你的控制器中, @shares = @share.fans.paginate(page: params[:page])将返回用户(粉丝)列表

编辑:因为你没有使用传统的名字(粉丝代替用户而不喜欢分享),你可能需要添加更多的选项,如inverse_of和class_name,但我不是很确定