ruby-on-rails - 使用 Active Record 删除冗余查询

标签 ruby-on-rails database activerecord

下面的代码可以工作,但是运行了太多我不喜欢的 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 中,我正在调用 profile.country.name 这一切正常,但 Rails 正在运行一个额外的 SQL 调用来查找我想要的名称要做的是在我的初始查找中捕获此信息。

我的问题是因为 country 链接到 profile 而不是 user 我无法将它添加到我的 .includes 因为它没有将其视为可链接的表。我能做些什么来强制包含的内容加入链接到 profile 的表吗?

相关型号信息如下;

用户:

has_one  :profile, dependent: :destroy

简介:

belongs_to :user
belongs_to :country

国家:

has_many :profiles

最佳答案

您应该能够在原始查询中包含国家/地区,方法是将其嵌套在 .includes 调用中的配置文件下:

User.includes( {:profile => [:country], :roles} )

关于ruby-on-rails - 使用 Active Record 删除冗余查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16443310/

相关文章:

ruby-on-rails - rails 与 Oauth : multiple providers

ruby-on-rails - 如何让记录器在 IRB 中工作?

Mysql建表多好还是建表少好?

mysql - 使用复合连接查找 ActiveRecord

ruby-on-rails - 在 Windows 上启动 Rails 服务器时出错

mysql - 如何将类的实例方法名称存储在sql数据库的列中?

sql - 通用递归sql查询

database - 如何将数据库置于 git(版本控制)之下?

ruby-on-rails - 在 Rails/ActiveRecord 3 中,如何更改 MySQL 的默认主键类型?

ruby-on-rails - 关联关联的 Rails 作用域