避免将userID添加到每个模型

时间:2017-02-19 20:53:28

标签: ruby-on-rails ruby activerecord

我觉得这可能是一个非常简单的问题,但我已经被困了一个多小时,所以我要把它扔到这里,看看有什么东西。

在我的Rails应用中,用户有页面,页面有段落。页面与用户具有belongs_to关系,我需要获得标记为特定用户重要的所有段落。

所以问题是,使用段落对页面和页面的预先存在的关系对用户有什么影响,我该怎么做?

我做不到:

current_user.pages.paragraphs.where(important: true)

因为current_user.pages返回一个集合,所以错误的是该集合上没有paragraph方法。

所以我必须在段落中添加一个User字段,并在那里建立关系吗?所以我可以这样做:

current_user.paragraphs.where(important: true)

或者有没有办法避免这样做?谢谢你的帮助!

1 个答案:

答案 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