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.

