2010-11-08 90 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