sql – rails查询来自不同表/模型的属性

我知道过去已经发布了类似的问题,我试图在导轨指南或以前的帖子的答案中找到解决方案,但要么答案对我不起作用,要么它们不是我想要的.我有以前的SQL经验(主要是
MySQL),我目前正在为一个新项目探索Rails.

我有一个表“用户”和一个表“公司”.用户始终只属于一家公司,但公司可以拥有许多用户.
我的数据的简单表示是:

users具有以下属性:id(INT),name(字符串),email(字符串),company_id
公司具有以下属性:id(INT),company_name(字符串),地址(字符串)

当我直接在数据库中执行以下SQL查询(而不是在rails中):

SELECT users.name,company.address FROM公司INNER JOIN用户
users.company_id = companies.id

我得到了一个2列的回复,第一列中的users.name和第二列中该用户所属的company.adres.由于它是内部联接,没有用户或没有公司的用户的公司没有列出,这正是我需要的.

现在尝试将此查询“转换”为rails(我正在使用Rails 4.1.1),我首先定义了User模型和Company模型,从而在models目录中创建了各自的user.rb和company.rb.对于user.rb,我声明了“belongs_to:company”,而对于company.rb,我声明了“has_many:users”.

迁移后等…我使用rails控制台添加一些数据并进行测试.单个模型上的所有查询都可以正常工作,也可以查询

Users.find(1).company.address

工作正常,但当我输入以下命令时:

e = Company.select(“companies.company_name,users.name”).join(:users)

它显示rails生成以下SQL查询:

SELECT companies.company_name,users.name FROM“companies”INNER JOIN“users”ON“users”.“company_id”=“companies”.“id”

我想这是与我直接访问数据库时使用的查询相同的查询.显示查询后,它显示结果,但未给出users.name属性.结果是具有正确数量的元素的数组(即没有显示没有公司的用户或没有显示用户的公司),但只给出了公司模型的属性,缺少user.name属性:

#< ActiveRecord :: Relation [# ,# ,#

最佳答案 我想你会发现它确实在那里,但你可能无法看到它……

尝试这样的事情:

e = Company.select("companies.*, users.name as user_name").joins(:users)
e.each do |c|
   puts "company: #{c.name}, user: #{c.user_name}"
end

输出:

rails runner junk.rb
company: aaaaa, user: user 1
company: bbbbb, user: user 2
company: aaaaa, user: user 3
点赞