我正在尝试创建一个布尔切换按钮来更改模型问题中的值。我只是在学铁路,所以请耐心等待。
在我看来,我创建了一个按钮:
<%= 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中添加了一些内容?
答案 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
是您期望的参数名称。
这将使您清楚地了解您通过或未通过的内容。