我有一些表通过多态关联加入......
我正试图找到一种方法来进行单个查询以从这些表中的多个表中返回数据......
我的模型如下:
#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
答案 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语句,其中包含SELECT
和JOIN
s以及WHERE
s