我正在尝试创建一个基本的调查应用。我试图用用户创建的任何答案创建一个选项,但出于某种原因我的问题没有在我选择的控制器中设置。
这是我的路线:
resources :questions do
resources :choices, only: [:create, :destroy]
end
我的观点:
<h3>Questions:</h3>
<ul><% @survey.questions.each do |question| %>
<li><p><%= question.title %></p></li>
<% choice = question.choices.build %>
<% if question.single_response == true %>
<%= form_for [question, choice] do |f| %>
<% question.answers.each do |answer| %>
<%= f.radio_button :answer_id, answer.id %> <%= answer.title %><br>
<% end %>
<%= f.hidden_field :survey_id, value: @survey.id %>
<%= f.submit %>
我选择的控制器中的set_question方法:
def set_question
@question = Question.find(params[:question_id])
end
然后是我的创建方法:
def create
@choice = @question.choices.build(choice_params)
respond_to do |format|
if @choice.save
format.html { redirect_to surveys_path, notice: 'Choice was successfully created.' }
format.json { render action: 'show', status: :created, location: @choice }
else
format.html { render action: 'new' }
format.json { render json: @choice.errors, status: :unprocessable_entity }
end
end
end
这是一个nil类错误。
undefined method `choices' for nil:NilClass
Rails.root: /Users/thomashammond89/SurveyMe
Application Trace | Framework Trace | Full Trace
app/controllers/choices_controller.rb:27:in `create'
Request
Parameters:
{"utf8"=>"✓",
"authenticity_token"=>"XjNNShH6jvTAcz1NQqSBU+a+2exP2STPFnja+yfbinY=",
"choice"=>{"answer_id"=>"19",
"survey_id"=>"1",
"question_id"=>"13"},
"commit"=>"Create Choice",
"question_id"=>"13"}
在我看来,问题存在于params中。知道为什么没有设置好吗?
答案 0 :(得分:1)
您没有在创建操作中定义实例变量@question
。尝试:
@question = Question.find(params[:choice][:question_id])