我希望能够显示喜欢用户帖子的用户。我将提供一个简单的信息量,所以这个问题不会被压倒。Ruby on Rails:无法呈现嵌套属性
我有三个类:用户,共享和意见。他们的模型设置同样:
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
和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
而且SharesController
和意见模型保持不变。
我不是真的得到所有的目的你的'Share'类中的关联,并且你正在引用'MicroPost'类,但是你没有显示这个类的代码。你能用简单的英文解释你的模型之间的关系吗? – pjam
这行有一些奇怪的地方:'has_many:agreeables,foreign_key:“fan_id”,class_name:“意见”,依赖于:destroy'。这一行将使得如果你做'share.agreeables',它会查找一个'fan_id == share.id'的意见。但是你说fan_id应该是一个用户ID。 – Jesper
pjam,很抱歉,我修复了不正确的数据。基本上我的目标是当你点击用户的帖子(分享)上的链接时,它会显示谁“喜欢”该帖子。 Hense the_many喜欢。它已经是一种工作方法,我只想显示哪些用户喜欢这个共享。对困惑感到抱歉。 Jesper,也许这是问题。我实际上不是在寻找share.agreeables,而是share.fans(我猜想会有相同的结果吗?我需要从这个模型中排除扇形线吗?如果是这样,它是否应该包含在用户模型中? –