簡體   English   中英

在導軌 3 中連接兩個表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM