Mat*_*t H 5 checkbox ruby-on-rails
潜伏很久了,但还没发帖。尽管经过数小时的调试,我似乎无法弄清楚为什么我的 check_box_tag 不会传递数组。本质上,我希望复选框行为允许用户选择多个记录,然后使用按钮停止或重新填充记录。
\n\n看法:
\n\n<% @medications.each do |medication| %> \n <div class="small-4 columns three-column"> \n <%= link_to medication.drug_name, edit_medication_path(medication), remote: true %> \n </div>\n <div class="small-3 columns three-column">\n <%= link_to medication.duration, edit_medication_path(medication), remote: true %>\n </div>\n <div class="small-3 columns three-column">\n <%= link_to medication.duration_unit, edit_medication_path(medication), remote: true %>\n </div>\n <div class="small-2 columns three-column"> \n <%= form_tag(medication_select_path, method: \'put\', :id => \'medication-select\') do %>\n <%= check_box_tag "medications[]", medication.id -%>\n <% end %>\n </div>\n<% end %>\n\n<div class="small-6 columns">\n <%= submit_tag "Discontinue", :type => \'submit\', :class => \'hollow alert button\', :form => \'medication-select\', :value => \'Discontinue\', method: \'put\' %>\n</div>\n<div class="small-6 columns">\n <%= submit_tag "Refill", :type => \'submit\', :class => \'hollow create button\', :form => \'medication-select\', :value => \'Refill\', method: \'put\' %>\n</div>\nRun Code Online (Sandbox Code Playgroud)\n\n控制器:
\n\n@selected_meds = Medication.find(params[:medications])\nRun Code Online (Sandbox Code Playgroud)\n\n当我按下提交按钮后查看终端时,尽管选择了 4 条记录,但我得到的输出仅包含参数中列出的第一个medication.id。
\n\n终端:
\n\nParameters: {"utf8"=>"\xe2\x9c\x93", "authenticity_token"=>"aNWTazi45CLxMA", "medications"=>["44"], "commit"=>"Discontinue"}\nRun Code Online (Sandbox Code Playgroud)\n\n查看源代码时,我的输出 HTML 似乎是正确的:
\n\n<form id="medication-select" action="/medication_select" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" /><input type="hidden" name="_method" value="put" /><input type="hidden" name="authenticity_token" value="DpJ8" />\n<input type="checkbox" name="medication_id[]" id="medication_id_" value="44" />\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n
我已经尝试了多个来源(并尽可能清晰地复制了代码),但仍然无法在 params ids 中获取数组。
\n\nhttp://railscasts.com/episodes/165-edit-multiple?view=asciicast \n http://apidock.com/rails/ActionView/Helpers/FormTagHelper/check_box_tag
\n\n正如终端输出所预期的那样,我得到了 id=44 的药物的预期更改,但如果我检查 id 为 44、46、50 的药物,它只会对第一个检查的 id 执行控制器操作。
\n\n我唯一能想到的是,也许分开我的提交按钮和我的 form_tag (但然后用 html5 表单标签引用它们)会以某种方式改变行为?提前致谢,我一直在为这个而烦恼。
\n\n编辑:请注意,当我选择一个不是列出的第一个复选框的复选框时(例如,如果第二个复选框的 id 为 46),则不会将 id 传递到参数中。因此,我认为这将问题范围缩小到了 check_box_tag 或我的 form_tag,但是,我仍然找不到为什么这不起作用,特别是当源代码在浏览器中显示正确时)。
\n我想问题出在您嵌套表单元素的方式上。对于每种药物,您创建一个表格,这意味着您有 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 %>
Run Code Online (Sandbox Code Playgroud)
这样,您就拥有了一个表单,提交后params[:medications]该表单将包含您选择的 ID。
| 归档时间: |
|
| 查看次数: |
10767 次 |
| 最近记录: |