Hey,
I’m having trouble understanding how to correctly build and save an object that has a has_many relationship. I am trying to map Products to Categories through CategoryAssignments:
Model:
class Product < ActiveRecord::Base has_many :category_assignments … end
class Category < ActiveRecord::Base has_many :category_assignments end
class CategoryAssignment < ActiveRecord::Base
belongs_to :category belongs_to :product end
I generated a scaffold for Products and in it I changed the view for “new” to add a select box of categories. The idea is that when you are creating a product, you can also pick what categories it belongs to.
<%= f.label :category_assignments %>
<%= collection_select(:category_assignment, :category_id, @categories, :id, :name, options ={:prompt => true}, html_options ={:multiple => true, :size => 6}) %>
My issue is in the controller. Specifically, for “create”, I am having trouble building the CategoryAssignments correctly. Here is what I have (it’s not working).
GET /products/new
GET /products/new.xml
def new @product = Product.new @categories = Category.find(:all)
respond_to do |format| format.html # new.html.erb format.xml { render :xml => @product } end
end
POST /products
POST /products.xml
def create @product = Product.new(params[:product]) logger.info(“New Product looks like #{params[:product]}\n”);
[logger.info](http://logger.info)("New Category Assignment looks like #{params[:category_assignment]}\n"); respond_to do |format| if @product.save #and @category_assignment.each { |category_assignment| category_assignment.save } @category_assignments = @product.category_assignments.build(params[:category_assignment]) @category_assignments.save [logger.info](http://logger.info)("Category Assignment ARRAY == @category_assignments\n"); flash[:notice] = 'Product was successfully created.' format.html { redirect_to(@product) } format.xml { render :xml => @product, :status => :created, :location => @product } else format.html { render :action => "new" } format.xml { render :xml => [@product.errors, @category_assignment.errors], :status => :unprocessable_entity } end end
end
Can someone give me some advice on the correct way of building CategoryAssignments?
Thanks!