【发布时间】:2020-08-22 08:11:16
【问题描述】:
我有一个带有几个单选按钮的表单。它提交的参数是一个哈希数组。在服务器日志中,哈希数组似乎没有名称(可能是因为我需要给它一个名称)。因此,我不能告诉params.require(:availability).permit(:<HERE>) 允许它,因为我不知道在.permit() 中输入什么名称。
我尝试修改私有控制器方法确实放宽了那里的要求,但我认为这是一个 hack 而不是一个好的解决方案。
这是我在视图中生成哈希数组的代码
<%= 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 模型中的字段匹配 - 它更原始,需要在提交后进行工作,然后才能在可用性中创建/更新记录。我不确定这是否会影响事情
到目前为止我所知道的
我以为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]。但我无法从单选按钮有意义地访问输入
【问题讨论】:
-
@jvillian 是的,我做到了。每当我完成这个应用程序(可能是 2027 年)时,您对堆栈溢出的响应将有 90%,而我的一些 cmets 将它们全部加入 :)
-
@jvillian 基本上,当我提交数组时,它会通过(可以在日志中看到),但它没有名称,所以我不能在创建控制器的动作
-
@jvillian 我已经研究过如何通过索引访问参数(我认为没有办法),显然不赞成像哈希一样处理一组参数,所以我修改了在那里,但从那种方法继续前进
-
radio_button_tag方法的行为与docs 中指定的一样。我建议您将 desired 参数添加到您的问题中,然后我们可以从那里向后工作。 -
谢谢@jvillian 我绝对可以做到。 TBH 我很高兴能够以任何方式访问哈希数组(最好是最佳实践,但可能没有 Rails 方式)。基本上我在寻找一些数据结构,其中包含每个时间段的真/假信息(用户通过表单一次提交所有信息)
标签: ruby-on-rails