has_many,:through => :多

时间:2013-12-12 11:44:08

标签: ruby-on-rails ruby ruby-on-rails-4

我希望有一种关系

has_many :foos, :through => :multiple

模型

网站:

has_many :pages
has_many :files

页:

belongs_to :site
has_many :legacy_url_redirects, as: :redirect_resourceable

文件:

belongs_to :site
has_many :legacy_url_redirects, as: :redirect_resourceable

LegacyUrlRedirects

belongs_to :redirect_resourceable, :polymorphic => true

我想做的是在Site模型中添加如下内容:

has_many :legacy_url_redirects, :through => [:pages, :files]

或者同样好的选择。

感谢。

修改

这是我做的: 网站模型:

def legacy_url_redirects(options = {})
  file_where = {"files.site_id" => self.id}.merge(options)
  page_where = {"pages.site_id" => self.id}.merge(options)

  LegacyUrlRedirect.includes(:file).where(file_where) + LegacyUrlRedirect.includes(:page).where(page_where) 
end

我还在https://stackoverflow.com/a/16124295/1141264

的帮助下将:pages:files关系添加到LegacyUrlRedirects模型

第二次编辑:

我重新修改了一下这个修补程序,以便在三个表之间手动编写LEFT OUTER JOIN。在进行连接时也没有指定查询的选择部分,对返回的记录隐含@readonly = true

0 个答案:

没有答案