在 Rails 5 中使用 check_box 将值传递给控制器操作
Pass value to controller action with check_box in Rails5
目前,单击按钮时,按钮会将对象的 id
传递给控制器操作。
现在我想创建一个具有相同功能的复选框。
当前按钮代码:
<%= link_to "Display", note_display_path(:id => n.id), method: :post, class: 'btn btn-default' %>
尝试的复选框代码:
<%= check_box n, note_display_path(:id => n.id), method: :post %>
这就是我现在正在尝试的方法,但我在终端中没有看到任何 activity 单击时。
它在 index
模板上,因此有很多对象正在迭代和显示,@notes.each do |n|
。
但这不需要是异步的;页面刷新就ok了
这可能吗?
能够通过在 <% @notes.each do |n| %>
循环中设置 form_for
来部分解决。
然后隐藏提交按钮。
<%= form_for n, :url => { controller: :notes, action: :post_it, :id => n.id } do |f| %>
<td> <%= f.check_box :posted %> </td>
<td> <%= f.submit '', style: 'display:none' %> </td>
<% end %>
我还没有想到的改进版本可能会在单击 check_box
时提交,而无需按回车键。
我会尝试 "onclick" 和一些 javascript,可能是这样的:
<%= check_box_tag(:name, :value, false, {onclick: "sendNotes(id='#{n.id}')"%>
<script>
function sendNotes(id) {
window.location.search += "note_id="+id;
}
</script>
然后你可以在你的控制器
中用params[:note_id]
做一些事情
目前,单击按钮时,按钮会将对象的 id
传递给控制器操作。
现在我想创建一个具有相同功能的复选框。
当前按钮代码:
<%= link_to "Display", note_display_path(:id => n.id), method: :post, class: 'btn btn-default' %>
尝试的复选框代码:
<%= check_box n, note_display_path(:id => n.id), method: :post %>
这就是我现在正在尝试的方法,但我在终端中没有看到任何 activity 单击时。
它在 index
模板上,因此有很多对象正在迭代和显示,@notes.each do |n|
。
但这不需要是异步的;页面刷新就ok了
这可能吗?
能够通过在 <% @notes.each do |n| %>
循环中设置 form_for
来部分解决。
然后隐藏提交按钮。
<%= form_for n, :url => { controller: :notes, action: :post_it, :id => n.id } do |f| %>
<td> <%= f.check_box :posted %> </td>
<td> <%= f.submit '', style: 'display:none' %> </td>
<% end %>
我还没有想到的改进版本可能会在单击 check_box
时提交,而无需按回车键。
我会尝试 "onclick" 和一些 javascript,可能是这样的:
<%= check_box_tag(:name, :value, false, {onclick: "sendNotes(id='#{n.id}')"%>
<script>
function sendNotes(id) {
window.location.search += "note_id="+id;
}
</script>
然后你可以在你的控制器
中用params[:note_id]
做一些事情