Rails params问题

时间:2014-02-25 02:55:38

标签: ruby-on-rails

我正在尝试创建一个基本的调查应用。我试图用用户创建的任何答案创建一个选项,但出于某种原因我的问题没有在我选择的控制器中设置。

这是我的路线:

  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中。知道为什么没有设置好吗?

1 个答案:

答案 0 :(得分:1)

您没有在创建操作中定义实例变量@question。尝试:

@question = Question.find(params[:choice][:question_id])