It seems that when a HABTM (or has many) is involved, having a
confirmation page prior to saving doesn't work as seamlessly as other
Rails view/model parings, specifically when confirming an edit. This
is caused by the immediate inserts or deletes that take place upon
assigning to collection_ids.  Changes are saved regardless of whether
the user wants to cancel or proceed.

select_tag 'product[provider_ids][]', collection_options_with_selected
#pseudo

def preview
  @product = Product.find params[:id]
  @product.attributes = params[:product]  #provider_ids saved here

  if @product.valid?
    render 'confirm;
  else
    render 'edit'
  end
end

build is not appropriate and push has the same functionality as
assigning to provider_ids.
So I have to do this:

def preview
  @product = Product.find params[:id]
  @product.attributes = params[:product]  #no product

  @selected_providers = Provider.find_by_ids params[:provider_ids]
#to display provider names in confirm page
  #...
end

def update
  @product = Product.find params[:id]
  @product.attributes = params[:product]
  @provider_ids = params[:provider_ids]

  if @product.valid?
    Product.transaction do
      @product.provider_ids = @provider_ids
      @product.save
    end
  else ...
end

There's no way to do this in the typical Rails attribute assignment
fashion?

--

You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to rubyonrails-t...@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.


Reply via email to