I was able to resolve this problem. For those curious: 
http://stackoverflow.com/questions/6656872/activerecord-building-for-nested-resource

On Jul 11, 2011, at 11:09 AM, Christopher Thielen wrote:

> I think this is related to 
> http://stackoverflow.com/questions/5914736/rails-3-undefined-method-model-name-for-arrayclass
>  .
> 
> I decided to change my ../ballot/new controller to:
> 
> def new
>    @survey = Survey.find(params[:survey_id])
> 
>    @ballot = @survey.ballots.build
> 
>    # Prepare the ballot
>    @ballot.preferences = @survey.questions.map{|question| 
> question.preferences.build}
>    #for question in @ballot.survey.questions
>    #  p = Preference.new
>    #  p.ballot = @ballot
>    #  p.question = question
>    #  @ballot.preferences << p
>    #end
> 
>    respond_to do |format|
>      format.html # new.html.erb
>      format.xml  { render :xml => @ballot }
>    end
>  end
> 
> And the new view to:
> 
> <%= form_for [@survey, @ballot] do |f| %>
>  <%=h @ballot.preferences[0].question.inspect %>
> 
>  <%= f.fields_for @ballot.preferences do |preference_form| %>
>    <%= preference_form.fields_for :question do |question_form| %>
>      <p>
>           <%= question_form.label :question %><br />
>           <%= radio_button("preference", "preference", "Yes") %> Yes
>           <%= radio_button("preference", "preference", "No") %> No
>           <%= radio_button("preference", "preference", "Decline") %> Decline
>      </p>
>    <% end %>
>  <% end %>
> 
>  <div class="actions">
>    <%= f.submit "Vote" %>
>  </div>
> <% end %>
> 
> And now I receive the error:
> undefined method `model_name' for Array:Class
> 
> for the fields_for line.
> 
> My guess is @ballot.preferences isn't a proper set of instances but just an 
> array, though my Ruby on Rails skills aren't good enough to figure this out. 
> Any ideas?
> 
> On Jul 10, 2011, at 11:14 PM, Christopher Thielen wrote:
> 
>> Hello,
>> 
>> I think this is an easy one for the average Rails developer but I'm a bit 
>> stuck.
>> 
>> I'm creating a simple voting app: any user can create a survey, with any 
>> number of questions, and other users can then vote by creating a ballot for 
>> that survey.
>> 
>> Here's the modeling:
>> 
>> class Survey < ActiveRecord::Base
>> has_many :questions
>> has_many :eligibilities
>> has_many :ballots
>> 
>> accepts_nested_attributes_for :questions, :allow_destroy => true
>> 
>> attr_accessible :title, :description, :status, :deadline, 
>> :questions_attributes
>> 
>> def owner
>>   Person.find(owner_id)
>> end
>> end
>> 
>> class Question < ActiveRecord::Base
>> belongs_to :survey
>> has_many :preferences
>> end
>> 
>> class Ballot < ActiveRecord::Base
>> belongs_to :survey
>> has_many :preferences
>> end
>> 
>> class Preference < ActiveRecord::Base
>> belongs_to :ballot
>> belongs_to :question
>> end
>> 
>> To be clear: a survey is the set of questions and a ballot is a voter's set 
>> of answers (preferences).
>> 
>> I'm using the nested route: /surveys/[:survey_id]/ballot/new for the voting 
>> page.
>> 
>> What I'm having trouble with is pre-populating the ballot with empty 
>> preferences. When ballot/new is called, I do this:
>> 
>> def new
>>   @survey = Survey.find(params[:survey_id])
>> 
>>   @ballot = @survey.ballots.build
>> 
>>   # Prepare the ballot
>>   for question in @ballot.survey.questions
>>     p = Preference.new
>>     p.ballot = @ballot
>>     p.question = question
>>     @ballot.preferences << p
>>   end
>> 
>>   respond_to do |format|
>>     format.html # new.html.erb
>>     format.xml  { render :xml => @ballot }
>>   end
>> end
>> 
>> and on the ballot/new.html.erb page, I try this:
>> 
>> <%= form_for [@survey, @ballot] do |f| %>
>> <%= f.fields_for :preferences do |preference_form| %>
>>   <%= preference_form.fields_for :question do |question_form| %>
>>     <p>
>>          <%= question_form.label :question %><br />
>>          <%= radio_button("preference", "preference", "Yes") %> Yes
>>          <%= radio_button("preference", "preference", "No") %> No
>>          <%= radio_button("preference", "preference", "Decline") %> Decline
>>     </p>
>>   <% end %>
>> <% end %>
>> 
>> <div class="actions">
>>   <%= f.submit "Vote" %>
>> </div>
>> <% end %>
>> 
>> But this merely shows one set of radio buttons with no question text, though 
>> I've confirmed the @survey.questions are populated with questions.
>> 
>> Does anybody see what I'm doing wrong here? My guess is looking at the 
>> new.html.erb is going to really show off something incorrect.
>> 
>> Christopher Thielen
> 

-- 
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 [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to