[英]joining two tables in rails 3
我在加入两个表时遇到问题,我很困惑,所以我做了一个新项目作为这个例子: http : //guides.rubyonrails.org/association_basics.html#the-has_many-association我有两个表客户和订单。
我的模特
class Customer < ActiveRecord::Base
has_many :orders
attr_accessible :id, :name
end
class Order < ActiveRecord::Base
belongs_to :customer
attr_accessible :id, :count, :customer_id
end
在迁移订单表中,我参考了通过以下方式实现的客户表:
t.references :customer
我用一些示例数据填充表并运行这个正在运行的 sql 查询。
select * from customers inner join orders on customers.id = orders.customer_id;
比我打开 rails 控制台并运行此查询:
Customer.joins(:orders)
这给我只有客户的结果,但我希望合并两个模型和适当的结果。 当我跑步时
Order.joins(:customer)
它只返回我的订单结果。
是否可以选择检索两个模型的合并结果? 谢谢建议:)
要访问客户的订单,请执行以下操作:
customers = Customer.joins(:orders)
customers.each do |customer|
customer.orders #<= contains orders for this customer
end
另一种方式 :
orders = Order.joins(:customer)
orders.each do |order|
order.customer #<= contains the customer
end
请注意,使用joins
,您正在执行内部连接,因此排除没有订单的客户......如果您想包括他们,请改用includes(:orders)
要在查询中包含相关表,请使用 :includes
Customer.includes(:orders)
要仅在查询条件中使用相关表,请使用 :joins
Customer.joins(:order).where(:unpaid => true)
但是您还有另一个问题,即使您在控制台中使用 do 'Customer.includes(:orders)' ,它仍然只会向您显示客户,因为这是主要调用。 但是,无需额外调用即可获取订单信息。 在使用“includes”和“joins”呈现视图后检查日志,您将看到调用次数的差异。
假设您在控制器中进行了不同的调用,并将以下内容放入您的视图中。
<% @orders.each do |o| %>
<%= customer.order.details %>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.