我觉得这可能是一个非常简单的问题,但我已经被困了一个多小时,所以我要把它扔到这里,看看有什么东西。
在我的Rails应用中,用户有页面,页面有段落。页面与用户具有belongs_to关系,我需要获得标记为特定用户重要的所有段落。
所以问题是,使用段落对页面和页面的预先存在的关系对用户有什么影响,我该怎么做?
我做不到:
current_user.pages.paragraphs.where(important: true)
因为current_user.pages返回一个集合,所以错误的是该集合上没有paragraph方法。
所以我必须在段落中添加一个User字段,并在那里建立关系吗?所以我可以这样做:
current_user.paragraphs.where(important: true)
或者有没有办法避免这样做?谢谢你的帮助!
答案 0 :(得分:1)
您应该在has_many :paragraphs, through: :pages
模型上建立User
关联。这将创建User#paragraphs
,这样您就可以调用current_user.paragraphs.where(important: true)
而无需创建更复杂的查询。
详细信息位于ActiveRecord::Associations.has_many
documents here。
您的模型看起来像是:
class User < ApplicationRecord
...
has_many :pages
has_many :paragraphs, through: :pages
...
end
class Page < ApplicationRecord
...
has_many :paragraphs
belongs_to :user
...
end
class Paragraph < ApplicationRecord
...
belongs_to :page
...
end