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.