2010-11-08 133 views
0

我有以下幾點:Ruby on Rails的 - 連接兩個表

模式

create_table "mouldings", :force => true do |t| 
    t.string "suppliers_code" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.string "name" 
    t.integer "supplier_id" 
    t.decimal "length" 
    t.decimal "cost" 
    t.decimal "width" 
    t.decimal "depth" 
end 

create_table "suppliers", :force => true do |t| 
    t.string "name" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
end 

模式

class Moulding < ActiveRecord::Base 

    # Set up associations 
    belongs_to :suppliers 

end 

class Supplier < ActiveRecord::Base 

    # Associations 
    has_many :mouldings, :dependent => :destroy 

end 

控制器

def show 
    @moulding = Moulding.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @moulding } 
    end 
end 

我想加入這兩個表,因此我可以在視圖中包含供應商的名稱。控制器的正確語法是什麼?

+0

你可能想提到Ruby不僅僅是標籤。標題和正文可能有用。 – 2010-11-08 17:27:45

回答

4

首先你的語法在你的模型模型中有點不合適。這應該是supplier奇異

class Moulding < ActiveRecord::Base 

    # Set up associations 
    belongs_to :supplier 

end 

如果你想在供應商名稱在控制器或視圖中使用此功能。

@moulding.supplier.name 

此外,如果你要通過一串成型品,你會想在你的初始查詢的供應商,因此不會運行在每次列出供應商名稱時間查詢中循環。對於語法是:

我也建議在官方活動記錄AssociationsQuery Interface指南考慮看看(爲Rails 3)

+1

@freshest您可能會從guides.rubyonrails.org中獲得一些用處。特別檢查活動記錄查詢接口,佈局和渲染以及動作控制器概述部分。 – 2010-11-08 17:42:13

+0

dub非常感謝您的幫助。如果我在控制器中使用Moulding.find(params [:id],:include =>:supplier),我將在視圖中使用什麼語法來引用供應商名稱? – freshest 2010-11-08 19:09:39

+0

語法不會從我上面發佈的內容中更改。唯一的區別是,如果你想說要獲得1000個模製品的供應商名稱,這將是一個顯着的性能提升。 – rwilliams 2010-11-08 19:13:48