Ruby on rails Rails:通过复选框选择项目,然后在按下按钮时对其执行操作?

Ruby on rails Rails:通过复选框选择项目,然后在按下按钮时对其执行操作?,ruby-on-rails,checkbox,submit,Ruby On Rails,Checkbox,Submit,我的最终目标是显示各种活动记录对象的列表,让用户通过复选框选择其中的一些对象,然后最后按下按钮触发对它们采取的一些操作 例如,假设这些活动录制对象代表歌曲,我希望用户能够选择歌曲列表,然后单击“保存播放列表”按钮,将所选歌曲列表传递给控制器中的某些功能 我相信我会首先从一个列表开始,在我的视图中,这些列表旁边有复选框。我想它会像这样: <table class='table table-bordered'> <thead> <tr> &

我的最终目标是显示各种活动记录对象的列表,让用户通过复选框选择其中的一些对象,然后最后按下按钮触发对它们采取的一些操作

例如,假设这些活动录制对象代表歌曲,我希望用户能够选择歌曲列表,然后单击“保存播放列表”按钮,将所选歌曲列表传递给控制器中的某些功能

我相信我会首先从一个列表开始,在我的视图中,这些列表旁边有复选框。我想它会像这样:

<table class='table table-bordered'>
  <thead>
    <tr>
      <th style="width:30px;"> Save to Playlist? </th>
      <th>Name</th>
    </tr>
  </thead>
  <tbody>
    <% @songs.each do |song| %>
      <tr>
        <td><%= check_box( "songs_selected", "selected_songs[]", { multiple: true }, song.id, nil) %>
        <td><%= song.name %></td>
      </tr>
    <% end %>
  </tbody>
</table>
<%= form_tag playlists_path %>
 <table>
    ...
    <% @songs.each do |song| %>
      <tr>
        <td><%= check_box( "songs_selected", "selected_songs[]", { multiple: true }, song.id, nil) %>
        <td><%= song.name %></td>
      </tr>
    <% end %>
  <%= submit_tag "Create Playlist" %>
<% end %>

是否保存到播放列表?
名称
如果我正确理解复选框代码,我所拥有的应该允许我传递一个带有我所选歌曲ID的选定歌曲数组

我只是不知道如何用一个链接到复选框的按钮来完成这个任务,这样当它被按下时,它就会将数组传递给我控制器中的一个方法


任何意见都是值得赞赏的,即使它指出我的设计有缺陷,并且有更好的方法。谢谢

你在正确的轨道上

实现这一点的最佳方法是将其全部放在一个框架内(否则,假设pre-Rails-5.1)

实际上,您可以像这样查看标记:

<table class='table table-bordered'>
  <thead>
    <tr>
      <th style="width:30px;"> Save to Playlist? </th>
      <th>Name</th>
    </tr>
  </thead>
  <tbody>
    <% @songs.each do |song| %>
      <tr>
        <td><%= check_box( "songs_selected", "selected_songs[]", { multiple: true }, song.id, nil) %>
        <td><%= song.name %></td>
      </tr>
    <% end %>
  </tbody>
</table>
<%= form_tag playlists_path %>
 <table>
    ...
    <% @songs.each do |song| %>
      <tr>
        <td><%= check_box( "songs_selected", "selected_songs[]", { multiple: true }, song.id, nil) %>
        <td><%= song.name %></td>
      </tr>
    <% end %>
  <%= submit_tag "Create Playlist" %>
<% end %>

...

在这里,您需要控制器方法的路由,我任意编造了
playlists\u path
,假设您的
路由中只有
资源:playlists,仅:[:create]
,以匹配您的示例。

您的思路正确

实现这一点的最佳方法是将其全部放在一个框架内(否则,假设pre-Rails-5.1)

实际上,您可以像这样查看标记:

<table class='table table-bordered'>
  <thead>
    <tr>
      <th style="width:30px;"> Save to Playlist? </th>
      <th>Name</th>
    </tr>
  </thead>
  <tbody>
    <% @songs.each do |song| %>
      <tr>
        <td><%= check_box( "songs_selected", "selected_songs[]", { multiple: true }, song.id, nil) %>
        <td><%= song.name %></td>
      </tr>
    <% end %>
  </tbody>
</table>
<%= form_tag playlists_path %>
 <table>
    ...
    <% @songs.each do |song| %>
      <tr>
        <td><%= check_box( "songs_selected", "selected_songs[]", { multiple: true }, song.id, nil) %>
        <td><%= song.name %></td>
      </tr>
    <% end %>
  <%= submit_tag "Create Playlist" %>
<% end %>

...

在这里,您需要控制器方法的路由,我任意编造了
playlists\u path
,假设您的
路由中只有
资源:playlists:[:create]
,以匹配您的示例。

最简单的方法是将这些复选框设置为数组。然后将其从
包装成一个
,这样当按下按钮时,提交此表单,您将获得所有歌曲的ID到控制器
例如:-

<%= form_tag you_path, method: :post, id: 'send-songs-id', class: 'form-horizontal' do  %>
    <table class='table table-bordered'>
      <thead>
        <tr>
          <th style="width:30px;"> Save to Playlist? </th>
          <th>Name</th>
        </tr>
      </thead>    
      <tbody>
        <% @songs.each do |song| %>
          <tr>
              <td><%=check_box_tag 'selected_songs[]', song.id%></td>
              <td><%= song.name %></td>
          </tr>
        <% end %>
        <%= content_tag :button, :type => :submit, class: 'btn btn-success' do %>
          Submit
        <%end%>
      </tbody>
    </table>
<%end%>

最简单的方法是将这些复选框设置为数组。然后将其从
包装成一个
,这样当按下按钮时,提交此表单,您将获得所有歌曲的ID到控制器
例如:-

<%= form_tag you_path, method: :post, id: 'send-songs-id', class: 'form-horizontal' do  %>
    <table class='table table-bordered'>
      <thead>
        <tr>
          <th style="width:30px;"> Save to Playlist? </th>
          <th>Name</th>
        </tr>
      </thead>    
      <tbody>
        <% @songs.each do |song| %>
          <tr>
              <td><%=check_box_tag 'selected_songs[]', song.id%></td>
              <td><%= song.name %></td>
          </tr>
        <% end %>
        <%= content_tag :button, :type => :submit, class: 'btn btn-success' do %>
          Submit
        <%end%>
      </tbody>
    </table>
<%end%>