gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 03:49:24 25 4
gpt4 key购买 nike

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

我有一个表“用户”和一个表“公司”。一个用户永远只属于一个公司,但一个公司可以有多个用户。
我的数据的简单表示是:
users has the following attributes: id (INT), name(string), email(string), company_id
companies has the following attributes: id (INT), company_name(string), address(string)

当我直接在数据库中(而不是在 rails 中)执行以下 SQL 查询时:
SELECT users.name, company.address FROM companies INNER JOIN users on
users.company_id=companies.id

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

现在试图将这个查询“翻译”成 rails(我使用的是 Rails 4.1.1),我首先定义了 User 模型和 Company 模型,从而在模型目录中创建了它们各自的 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").joins(:users)
它表明以下 SQL 查询是由 rails 生成的:
SELECT companies.company_name, users.name FROM "companies" INNER JOIN "users" ON "users"."company_id" = "companies"."id"
我想这与我直接访问数据库时使用的查询相同。显示查询后,显示结果,但没有给出 users.name 属性。结果是一个具有正确元素数量的数组(即没有显示没有公司的用户或没有没有用户的公司),但只给出了 Company 模型的属性,缺少 user.name 属性:
#<ActiveRecord::Relation [#<Company id: nil, address: "addresexample1">, #<Company id: nil, address: "addresexample3">, #<Company id: nil, address: "addressexample4">]>
我做错了什么,还是我期望 Rails 中有一些不正确的东西?

最佳答案

我想你会发现它确实在那里,但你可能看不到它......

尝试这样的事情:

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

关于sql - rails 查询来自不同表/模型的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24183811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com