我有以下模型结构
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'
如何实现这一目标?
我注意到您的用户和公司都应该
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")