如何查询多态关联关系以从多个表返回数据 - rails4

时间:2016-05-23 15:48:27

标签: ruby postgresql activerecord polymorphic-associations ruby-on-rails-4.2

我有一些表通过多态关联加入......

我正试图找到一种方法来进行单个查询以从这些表中的多个表中返回数据......

我的模型如下:

#profile.rb
class Profile < ActiveRecord::Base
  has_many :user_profiles, dependent: :destroy
  has_many :wizards, through: :user_profiles, source: :user, source_type: "Wizard"
end

#user_profile.rb
class UserProfile < ActiveRecord::Base
  belongs_to :user, polymorphic: true, dependent: :destroy
  belongs_to :profile
end

#wizard.rb
class Wizard < ActiveRecord::Base
  has_one :user_profile, as: :user, dependent: :destroy
  has_one :profile, through: :user_profile
  has_one :wizard_specialization, dependent: :destroy
  has_one :career, through: :wizard_specialization
end

#career.rb
class Career < ActiveRecord::Base
  has_many :wizard_specializations, dependent: :destroy
  has_many :wizards, through: :wizard_specializations
end

如何编写连接(或:includes)查询以返回所有向导的配置文件,以及来自profiles表的信息,还包括他们的专业是从careers表到wizard_specializations

提前致谢。

PS:如果我可以排除created_at&amp;之类的字段,那将会很棒。 updated_at

2 个答案:

答案 0 :(得分:1)

您可以将ActiveRecord的includes方法用于eager-load associated data。将其与select方法结合使用,只包含或排除所需的列:

Wizard.includes(:career, :profile).select('wizards.name', 'wizards.etc', 'careers.name', 'careers.etc', 'profiles.*')

答案 1 :(得分:0)

我不确定Rails是否支持所有设置配置的直接AR查询......

无论如何,我终于决定用纯SQL编写它并在以下的帮助下执行:

ActiveRecord::Base.connection.execute(query)

其中query包含我的纯SQL语句,其中包含SELECTJOIN s以及WHERE s