Problema has_many + accepts_nested_attributes_for

Hi, I have one relationship ONE to N and need to populate the N in the
same form that have “Ad” model.
Below is my code from this problem…
I need to create a few checkbox populated using model “Options” and
what was selected by user need to save into model “OptionAnswer” that
is related with “Ad” model.
If I was too much confusing please say it and I’ll try to explain in
another way.

Thanks

— models
class Ad < ActiveRecord::Base
has_many :optionanswers, :class_name => “OptionAnswer”, :foreign_key
=> “ad_id”, :dependent => :destroy

accepts_nested_attributes_for :optionanswers
end

class OptionAnswer < ActiveRecord::Base
belongs_to :ad
belongs_to :option
end

class Option < ActiveRecord::Base
has_many :optionanswer
end

— controller
def new
@ad = Ad.new
@ad.optionanswers.build
end

— view
<%= form_for(@ad, :url => { :action => “create” }) do |f| %>

<% f.fields_for :optionanswers do |build_answer| %>

<% for option_a in Option.find(:all, :conditions => {:option_type_id
=> 2}) %>

<div>
<%= build_answer.check_box :option_id option_a.id %>&nbsp;<%=

option_a.text %>

<% end %>

<% end %>

<% end %>

On Dec 11, 1:19am, Sp4wnX [email protected] wrote:

Hi, I have one relationship ONE to N and need to populate the N in the
same form that have “Ad” model.
Below is my code from this problem…
I need to create a few checkbox populated using model “Options” and
what was selected by user need to save into model “OptionAnswer” that
is related with “Ad” model.
If I was too much confusing please say it and I’ll try to explain in
another way.

So Ad has_many options, :through => :optionanswers?
If you want the user to pick only from existing options, then you
don’t actually need nested_attributes - create checkboxes with a name
of ad[option_ids][] and whose values are the ids of the options.

This works because with a has many through, you get an option_ids=
method

Fred

— MODELS
class Ad < ActiveRecord::Base
belongs_to :user
has_many :options, :through => :optionanswers
end

class OptionAnswer < ActiveRecord::Base
belongs_to :ad
belongs_to :option
end

class Option < ActiveRecord::Base
belongs_to :optiontype
has_many :ads, :through => :optionanswers
end

— CONTROLLER
def create
@ad = Ad.new(params[:ad])

if @ad.save
  flash[:success] = "Ads saved with success!"
  redirect_to @ad
else
  render 'new'
end

end

— VIEW (parts important)
<% for option_a in Option.find(:all, :conditions => {:option_type_id
=> 2}) %>

<%= check_box_tag "ad[option_ids][]", option_a.id %> <%= option_a.text %>
<% end %>

---- ERROR
ActiveRecord::HasManyThroughAssociationNotFoundError in
EscortController#create

Could not find the association :optionanswers in model Ad
Rails.root: /Users/celestinoruas/Documents/Dropbox/railsprojects/
clasisex3

Application Trace | Framework Trace | Full Trace
app/controllers/escort_controller.rb:27:in new' app/controllers/escort_controller.rb:27:in create’

If you can help me I’ll be great full.

Regards

On Dec 11, 12:35pm, Frederick C. [email protected]

On Dec 11, 11:38pm, Sp4wnX [email protected] wrote:

---- ERROR
ActiveRecord::HasManyThroughAssociationNotFoundError in
EscortController#create

Could not find the association :optionanswers in model Ad
Rails.root: /Users/celestinoruas/Documents/Dropbox/railsprojects/
clasisex3

Like the error message says, you still need the optionanswers
association.

Fred

Hi, worked, thanks a lot.

Regards