如何在rails表单中为表单参数命名



我有一个带有几个单选按钮的窗体。它提交的参数是一个散列数组。在服务器日志中,散列数组似乎没有名称(可能是因为我需要给它一个名称(。因此,我不能告诉params.require(:availability).permit(:<HERE>)允许它,因为我不知道在.permit()里面放什么名字。

我试过修改私有控制器方法,确实放宽了那里的要求,但我认为这是一个破解方法,而不是一个好的解决方案。

这是我在视图中生成哈希数组的代码

<%= form_tag("/availabilities/") do |f| %> 
<%= label_tag :availability %>
<% @hours.each do |hour| %>  
<%= hour[:time_slot] %>
<%= radio_button_tag hour.to_s, available_in_words(hour[:time_slot_available?]) %>
<%= radio_button_tag hour.to_s, available_in_words(!hour[:time_slot_available?]) %></br>
<% end %> <!-- ends hour loop --> 
<div><%= submit_tag 'Save' %></div>
<% end %> <!-- ends form --> 

注意:通过此表单提交的内容与Availability模型中的字段不匹配,因为它更原始,在提交后需要在Availability中创建/更新记录。我不确定这是否会影响

到目前为止我所知道的

我认为label_tag会给表单参数一个名称,通过这个名称可以在params.require(:availability)中引用它,但这导致了错误param is missing or the value is empty: availability

备注

这就是params提交后的样子:

<ActionController::Parameters {"authenticity_token"=>"KEuNcLzuAcQj6b+0oQ0FzjOE35f1Xq3MNNomzTnC9SCML9kaWVIFgphCgDRy5cHowxQ/N4kodNIXYCAwtCPGnA==", "{:time_slot=>2020-08-22 18:00:00 +1000, :time_slot_available?=>false}"=>"Unavailable", "{:time_slot=>2020-08-22 20:00:00 +1000, :time_slot_available?=>false}"=>"Available", "commit"=>"Save", "controller"=>"availabilities", "action"=>"create"} permitted: false>

访问";authenticity_token";很简单:params[:authenticity_token]。但我无法有意义地访问来自单选按钮的输入

name是几乎所有FormTagHelper方法的第一个参数。

radio_button_tag(name, value, checked = false, options = {})

https://api.rubyonrails.org/v5.1.7/classes/ActionView/Helpers/FormTagHelper.html#method-i-radio_button_tag

在机架(Rails位于其顶部(中,您可以使用括号通过参数传递散列:

foo[bar][a]=1&foo[bar][b]=2

将导致:

{
foo: {
bar: {
a: 1,
b: 2
}
}
}

您可以通过将哈希传递到白名单嵌套哈希。permission:

params.require(:foo).permit(bar: [:a, :b])

您可以使用空括号通过参数传递数组:

foo[bar][]=1&foo[bar][]=2

这将导致:

{
foo: {
bar: [1,2]
}
}

然后,您可以通过以下方式将阵列列入白名单:

params.require(:foo).permit(bar: [])

CCD_ 9将允许允许的标量值的数组。

我不确定@hour.to_s到底返回了什么,但您可能需要确保它实际上适合用作formdata键/值对中的键,并且不会干扰Rack的参数解析器。

最新更新