Rails ActionController :: ParametersMissing在QuestionsController#update中

时间:2013-07-29 02:12:51

标签: ruby-on-rails ruby ruby-on-rails-4

我正在尝试创建一个布尔切换按钮来更改模型问题中的值。我只是在学铁路,所以请耐心等待。

在我看来,我创建了一个按钮:

<%= link_to("Answered", question_path(question, :status => true), :method => :put) %>

当我查看按钮的URL时:

hackerQ.com/questions/8?status=true

这是我给出的错误。

Rails ActionController::ParameterMissing in QuestionsController#update

  # Never trust parameters from the scary internet, only allow the white list through.
    def question_params
      params.require(:question).permit(:topic, :question, :status, :user_id, :teacher_id)
    end
end

我的问题应该在我的问题控制器中创建了一个新动作,或者在我的params.require中添加了一些内容?

4 个答案:

答案 0 :(得分:1)

由于代码:

params.require(:question)

你的params哈希必须有一个“问题”键,如下所示:

{"question" => {"status"=>"true"}` ...} 

我不知道正确的方法。也许在link_to做:

link_to("Answered", question_path(question, "question[status]" => true), :method => :put)

此外,link_to会创建<a>标记。你为什么称这个按钮?在html中,按钮和链接是不同的东西。

答案 1 :(得分:1)

您的控制器正在寻找:question参数,但无法在任何地方找到它。您没有引用:在任何地方提问,我认为您在question_path()调用中有错误。尝试:

<%= link_to("Answered", question_path(:question, :status => true), :method => :put) %>

答案 2 :(得分:0)

不,你应该在你的应用程序中有这样的东西:

<%= form_for(question, method: :put) do |f| %>
  <% f.hidden_field :status, value: true %>
  <% f.submit "Answered" %>
<% end %>

我不知道这是否是正确的语法,但您无法通过URL发送这些参数。

答案 3 :(得分:0)

调试的一个好方法是从视图中打印传递给控制器​​的所有参数。您可以通过在html.erb文件(视图)中添加以下内容来完成此操作:

<%= params.inspect %>

或者要打印控制器所期望的参数值,请使用:

<%= params[:question] %>

其中question是您期望的参数名称。

这将使您清楚地了解您通过或未通过的内容。