开发者

Ruby on Rails - Join Two Tables

开发者 https://www.devze.com 2023-01-24 14:26 出处:网络
I have the following: Schema 开发者_运维知识库 create_table \"mouldings\", :force => true do |t|

I have the following:

Schema

开发者_运维知识库
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

Models

class Moulding < ActiveRecord::Base

  # Set up associations
  belongs_to :suppliers

end

class Supplier < ActiveRecord::Base

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

end

Controller

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

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

I want to join the two tables so I can include the supplier's name in a view. What is the correct syntax for the controller?


First off your syntax is a bit off in your moldings model. It's should be supplier singular

class Moulding < ActiveRecord::Base

  # Set up associations
  belongs_to :supplier

end

If you want the supplier name use this in the controller or view.

@moulding.supplier.name

Also if you're going to be looping through a bunch of moldings you'll want to include suppliers in your initial query so it doesn't run a query for each time it lists a suppliers name. The syntax for that is:

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

I'd also suggest taking a look at the official Active Record Associations and Query Interface guides (for Rails 3)


From a broad perspective, you can use either :joins or :include in your ActiveRecord statement. The major difference is that joins will do an inner join while include will do an outer join. http://asciicasts.com/episodes/181-include-vs-joins

0

精彩评论

暂无评论...
验证码 换一张
取 消