我有以下内容:
模式
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 :(得分:4)
首先,您的模型中的语法有点偏差。这应该是supplier
单数
class Moulding < ActiveRecord::Base
# Set up associations
belongs_to :supplier
end
如果您想要供应商名称,请在控制器或视图中使用它。
@moulding.supplier.name
此外,如果您要循环使用一系列模型,您需要在初始查询中包含供应商,这样每次列出供应商名称时都不会运行查询。其语法是:
@moulding = Moulding.find(params[:id],:include => :supplier)
我还建议您查看官方活动记录Associations和Query Interface指南(适用于Rails 3)
答案 1 :(得分:1)
从广义的角度来看,您可以在ActiveRecord语句中使用:join或:include。主要区别在于连接将执行内连接,而include将执行外连接。 http://asciicasts.com/episodes/181-include-vs-joins