Ruby on Rails - 加入两个表

时间:2010-11-08 17:24:49

标签: 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

我想加入这两个表,以便在视图中包含供应商的名称。控制器的正确语法是什么?

2 个答案:

答案 0 :(得分:4)

首先,您的模型中的语法有点偏差。这应该是supplier单数

class Moulding < ActiveRecord::Base

  # Set up associations
  belongs_to :supplier

end

如果您想要供应商名称,请在控制器或视图中使用它。

@moulding.supplier.name

此外,如果您要循环使用一系列模型,您需要在初始查询中包含供应商,这样每次列出供应商名称时都不会运行查询。其语法是:

@moulding = Moulding.find(params[:id],:include => :supplier)

我还建议您查看官方活动记录AssociationsQuery Interface指南(适用于Rails 3)

答案 1 :(得分:1)

从广义的角度来看,您可以在ActiveRecord语句中使用:join或:include。主要区别在于连接将执行内连接,而include将执行外连接。 http://asciicasts.com/episodes/181-include-vs-joins