Ruby on Rails Monday, March 30, 2015

Hi there,

I'm learning the active model, and I'm trying to retrieve an association.

My models are:

class Composition < ActiveRecord::Base
  has_and_belongs_to_many
:materials
  belongs_to
:product
end
 
class Material < ActiveRecord::Base
 has_and_belongs_to_many
:compositions
 has_many
:products, through: :composition
end
   
class Product < ActiveRecord::Base
  has_many
:compositions
  has_many
:materials, through: :composition
  accepts_nested_attributes_for
:materials
end


My schema is:

 
 create_table "compositions", force: :cascade do |t|
    t
.integer  "product_id"
    t
.integer  "material_id"
    t
.integer  "material_quantity"
    t
.datetime "created_at",        null: false
    t
.datetime "updated_at",        null: false
 
end


  create_table
"materials", force: :cascade do |t|
    t
.string   "name"
    t
.decimal  "unit_cost"
    t
.string   "unit_measure"
    t
.datetime "created_at",   null: false
    t
.datetime "updated_at",   null: false
 
end


  create_table
"products", force: :cascade do |t|
    t
.string   "name"
    t
.string   "description"
    t
.datetime "created_at",  null: false
    t
.datetime "updated_at",  null: false
 
end

On my CompositionsController index method, I would like to retrieve all raw materials for a product id.

What i have  now is:

  def index
   
@product = Product.find(params[:product_id])
   
@compositions = @product.compositions
 
end


How
 do I retrieve materials attributes from @compositions?

When I try to use  
@compositions = @product.compositions.includes(:materials)
It gives me the error:

PG::UndefinedTable: ERROR:  relation "compositions_materials" does not exist  LINE 5:                WHERE a.attrelid = '"compositions_materials"'...                                            ^  :               SELECT a.attname, format_type(a.atttypid, a.atttypmod),                       pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod                  FROM pg_attribute a LEFT JOIN pg_attrdef d                    ON a.attrelid = d.adrelid AND a.attnum = d.adnum                 WHERE a.attrelid = '"compositions_materials"'::regclass                   AND a.attnum > 0 AND NOT a.attisdropped                 ORDER BY a.attnum


Any hints?

Thanks in advance,
Leandro

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/643eb535-3085-46d4-b77b-5c50c6cb7636%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment