Rails 多重联接查询

问题描述 投票:0回答:1

我有以下模型结构

class Transaction
  belongs_to :company
  belongs_to :user
end

class Company
  belongs_to :address
end

class User
  belongs_to :address
end

classAddress
 has_many :companies
 has_many :users
end

我想查询所有交易并获取公司地址和用户地址

 Transaction.joins([company: :address], [user: :address])
    .select('company.addresses.line_1 as company_add_line1', 
       'user.addresses.line_1 as user_add_line1')

对于语法“company.addresses.line_1”,我收到以下错误

ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'company.addresses.line_1' in 'field list'

如何实现这一目标?

mysql ruby-on-rails join activerecord
1个回答
0
投票

我注意到您的用户和公司都应该

have_many :transactions

你的语法失败,因为你有类似 ActiveRecord 的语法(例如 SQL 片段中的

companies.addresses.line1

你需要这样的东西......

select_user_add = <<-SEL
  (select line1 
   from addresses
   joins users
     on users.address_id = addresses.id
   where transaction.user_id = users.id ) as user_add_line1
  SEL

select_company_add = <<-SEL
  (select line1 
   from addresses
   joins companies
     on companies.address_id = addresses.id
   where transaction.user_id = companies.id ) as company_add_line1
  SEL

Transaction.select("transactions.*, #{select_user_add}, #{select_company_add")
© www.soinside.com 2019 - 2024. All rights reserved.