0

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

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

<%= 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

4 回答 4

1

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

<%= link_to("Answered", question_path(:question, :status => true), :method => :put) %>
于 2014-01-25T01:58:58.037 回答
1

因为代码:

params.require(:question)

您的参数哈希必须有一个“问题”键,如下所示:

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

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

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

此外,link_to 创建一个<a>标签。你为什么叫那个按钮?在 html 中,按钮和链接是不同的东西。

于 2013-07-30T13:15:36.280 回答
0

不,您的应用程序中应该有这样的内容:

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

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

于 2013-07-29T09:31:50.183 回答
0

调试的一个好方法是打印从视图传递给控制器​​的所有参数。您可以通过在html.erb文件(视图)中添加以下部分来做到这一点:

<%= params.inspect %>

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

<%= params[:question] %>

question您期望的参数的名称在哪里。

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

于 2018-02-21T13:37:47.733 回答