gpt4 book ai didi

ruby-on-rails - Rails form_tag 和 check_box_tag 数组,用于收集选定对象

转载 作者:行者123 更新时间:2023-12-04 00:09:34 26 4
gpt4 key购买 nike

潜伏了好久,还没发帖。尽管进行了数小时的调试,但我似乎无法弄清楚为什么我的 check_box_tag 不会传递数组。本质上,我希望复选框行为允许用户选择多个记录,然后使用按钮停止或重新填充记录。

看法:

<% @medications.each do |medication| %>     
<div class="small-4 columns three-column">
<%= link_to medication.drug_name, edit_medication_path(medication), remote: true %>
</div>
<div class="small-3 columns three-column">
<%= link_to medication.duration, edit_medication_path(medication), remote: true %>
</div>
<div class="small-3 columns three-column">
<%= link_to medication.duration_unit, edit_medication_path(medication), remote: true %>
</div>
<div class="small-2 columns three-column">
<%= form_tag(medication_select_path, method: 'put', :id => 'medication-select') do %>
<%= check_box_tag "medications[]", medication.id -%>
<% end %>
</div>
<% end %>

<div class="small-6 columns">
<%= submit_tag "Discontinue", :type => 'submit', :class => 'hollow alert button', :form => 'medication-select', :value => 'Discontinue', method: 'put' %>
</div>
<div class="small-6 columns">
<%= submit_tag "Refill", :type => 'submit', :class => 'hollow create button', :form => 'medication-select', :value => 'Refill', method: 'put' %>
</div>

Controller :
@selected_meds = Medication.find(params[:medications])

当我按下提交按钮后查看终端时,尽管选择了 4 条记录,但我得到的输出仅包含 params 中列出的第一个 drug.id。

终端:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"aNWTazi45CLxMA", "medications"=>["44"], "commit"=>"Discontinue"}

查看源代码时,我的输出 HTML 似乎也是正确的:
<form id="medication-select" action="/medication_select" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="&#x2713;" /><input type="hidden" name="_method" value="put" /><input type="hidden" name="authenticity_token" value="DpJ8" />
<input type="checkbox" name="medication_id[]" id="medication_id_" value="44" />



我已经尝试了多个来源(并尽可能清楚地复制了代码),但仍然无法在 params ids 中出现一个数组。

http://railscasts.com/episodes/165-edit-multiple?view=asciicast
http://apidock.com/rails/ActionView/Helpers/FormTagHelper/check_box_tag

正如终端输出所预期的那样,我得到了 id=44 的药物预期变化,但是如果我检查 id 为 44、46、50 的药物,它只会对第一个检查的 id 执行 Controller 操作。

我唯一能想到的是,可能将我的提交按钮和我的 form_tag 分开(但随后用 html5 表单标签引用它们)正在以某种方式改变行为?提前致谢,我一直在为这个拔头发。

编辑:请注意,当我选择不是列出的第一个框的单个复选框时(例如,如果第二个复选框的 id 为 46),则不会将 id 传递给 params。所以我认为这将问题缩小到 check_box_tag 或我的 form_tag,但是,我仍然找不到为什么这不起作用,特别是因为源代码在浏览器中都显示正确)。

最佳答案

我想问题在于您嵌套表单元素的方式。对于每种药物,您正在创建一个表格,这意味着您有 n 个药物的 n 个表格。

form像这样在循环之外:

<%= form_tag(medication_select_path, method: 'put', :id => 'medication-select') do %>
<% @medications.each do |medication| %>
<%= check_box_tag "medications[]", medication.id -%>
<% end %>
<% end %>

这样,您就有了一个表单,提交时将生成 params[:medications]包含您选择的 ID。

关于ruby-on-rails - Rails form_tag 和 check_box_tag 数组,用于收集选定对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38161779/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com