以下代码有效,但我喜欢运行太多的SQL语句;
User.includes([:profile,:roles]).select("id, email, created_at, confirmed_at, countries.name").find_in_batches do |users|
users.map{|u| # In here I access profile.country.name}
end
要做的是抓取用户信息以及一些个人资料信息并将其放入csv格式。
在我调用.map
的{{1}}内部,这很好但Rails正在运行额外的SQL调用来查找名称,我想要做的是在初始查找中捕获此信息。
我的问题是因为profile.country.name
与country
相关联而不是profile
我无法将其添加到user
,因为它不会将其视为.includes
可链接表。我可以做些什么来强制包含加入链接到profile
的表吗?
相关型号信息如下;
用户:
has_one :profile, dependent: :destroy
资料:
belongs_to :user
belongs_to :country
国家:
has_many :profiles
答案 0 :(得分:2)
您应该可以在原始查询中包含国家/地区,方法是将其嵌入.includes调用中的个人资料下:
User.includes( {:profile => [:country], :roles} )