Grouped_collection_select for has_many :through Association not Updating

I have a scenario where I created a few has_many :through associations
which I am having trouble updating. I do appreciate any help! Thank you!

Here is my setup:

ruby 1.9.3p392
Rails 3.2.13

Here is the scenario:

I have 3 models that are related
There are many Industries, many Keywords, and many Conferences
Industries have many Keywords
Conferences have an Industry
Conferences choose Keywords based on its Industry

Keywords has a basic CRUD model. Creating an Industry then adding
Keywords works fine.

My relationship for Conferences, Industries, and Keywords is where I am
having issues. I am trying to update Conference information, change the
Industry that it is currently associated with, choose new Keywords based
on the new Industry all in the same form. When I remove the Keywords
element out of the mix, the update works. But when all three are there,
then I get the errors.

The view renders fine but when I submit a change, I get an error. The
error that I am seeing is:

Couldn’t find Industry with ID=3 for Conference with ID=1

My relationship for Industries and Keywords are:


class IKeywordable < ActiveRecord::Base

attr_accessible :industry_id, :keyword_id

belongs_to :industry
belongs_to :keyword

end

class CKeywordable < ActiveRecord::Base
attr_accessible :conference_id, :keyword_id

belongs_to :conference
belongs_to :keyword
end


Here are the Models:


class Industry < ActiveRecord::Base
attr_accessible :name,
:conferences_attributes,
:i_keywordables_attributes,
:keywords,
:keywords_attributes,
:keyword_ids

validates :name, presence: true
validates :name, uniqueness: true

Associations

has_many :conferences
accepts_nested_attributes_for :conferences

#Keywords
has_many :i_keywordables
has_many :keywords, through: :i_keywordables
accepts_nested_attributes_for :i_keywordables
accepts_nested_attributes_for :keywords

end

class Keyword < ActiveRecord::Base

attr_accessible
:name, :profile_id, :active, :rating,
:c_keywordables_attributes,
:i_keywordables_attributes,
:industries_atributes

Associations

#Industries
has_many :i_keywordables
has_many :industries, through: :i_keywordables
accepts_nested_attributes_for :i_keywordables

#Conferences
has_many :c_keywordables
has_many :conferences, through: :c_keywordables
accepts_nested_attributes_for :c_keywordables

end

class Conference < ActiveRecord::Base
attr_accessible
:name, :address1, :address2, :city, :email,
:web, :profile_id, :state_id, :conference,
:description, :date_start, :date_end, :venue, :venue_web,
:organizer, :organizer_web, :c_keywordables_attributes,
:industry_attributes, :industry_id,
:industry, :keyword_ids

Associations

belongs_to :state
belongs_to :industry
accepts_nested_attributes_for :industry

#Keywords
has_many :c_keywordables
has_many :keywords, through: :c_keywordables
accepts_nested_attributes_for :c_keywordables

serialize :keywords, Array

def to_s
state_id
end

end


Here is the Conference/edit.html.erb


edit <%= @conference.name %>

<%= form_for @conference do |c| %> <%= c.label :name %> <%= c.text_field :name %> <%= c.label :address1 %> <%= c.text_field :address1 %> <%= c.label :address2 %> <%= c.text_field :address2 %> <%= c.label :city %> <%= c.text_field :city %> <%= c.label :state_id%> <%= c.collection_select :state_id, State.order(:name), :id, :name %> <%= c.label :email %> <%= c.text_field :email %> <%= c.label :web %> <%= c.text_field :web %>
<%= c.label :industry_id %> <%= c.collection_select :industry_id, Industry.order(:name), :id, :name %>
<%= c.fields_for :industry, @industry do |ci| %> <%= ci.label :keyword_id %> <%= ci.grouped_collection_select :keywords, Industry.order(:name), :keywords, :name, :id, :name, {:include_blank => true}, { :multiple => true } %> <% end %>

<%= c.submit %>

<% end %> ********************************************************

Here is the Conference Controller:


def edit
@conference = Conference.find(params[:id])
end

def update
@conference = Conference.find(params[:id])
if @conference.update_attributes(params[:conference])
redirect_to action: “all”, notice: ‘conference was successfully
updated.’
else
render action: “edit”
end
end


Here are the parameters passed:

{“utf8”=>“✓”, “_method”=>“put”,
“authenticity_token”=>“k9fcAXF/iOXt3oVuTcxeDCaWOfE2PrVlBvFbQG8Mo/I=”,
“conference”=>{“name”=>“test conference”, “address1”=>“address 1”,
“address2”=>“address 2”, “city”=>“City”, “state_id”=>“38”,
“email”=>“[email protected]”, “web”=>“www.example.com”,
“industry_id”=>“1”, “industry_attributes”=>{“keywords”=>["", “6”, “5”],
“id”=>“3”}}, “commit”=>“Update Conference”, “action”=>“update”,
“controller”=>“conferences”, “id”=>“1”}

Thanks again for any help!!

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs