Ruby on Rails:一个check_box,用于几个submit_tag

时间:2013-05-13 13:17:00

标签: ruby-on-rails checkbox

我需要有一个check_box用于多种目的。 例如:我有一个文件列表。用户可以选择其中一些进行删除或分析。

我有以下代码,但它只接受一个submit_tag“删除已选中”。

<% if @files%>    
<%= form_tag destroy_multiple_files_path, method: :delete do %>
<%= submit_tag "Delete selected" %>
  <% @files.each do |file| %>
    <% if (arraydb.file=="no") %>
        <p><td> <%= check_box_tag "files[]", file.id %></td><%= file.name %></p>       

    <% else %>      

    <div class="my_profile_info">     
    <p><td> <%= check_box_tag "files[]", file.id %></td> <%= file.name %></p>        

    <td class="Info">
    <a href="<%=file.info%>" target ="_blank" class= "btn btn-mini btn-info">Info</a>  
    </td>  

     </div>

    <% end %>
  <%end%>

<%end%> 
<%else%>

<%end%>

我想提交submit_tag“Analyze”。 我尝试过类似的东西但当然没用。

 <% if @files%>    
    <%= form_tag destroy_multiple_files_path,analyse_multiple_files_path method: :delete,method:post do %>
    <%= submit_tag "Delete selected" %>
   <%= submit_tag "Analyse" %>
      <% @files.each do |file| %>
        <% if (arraydb.file=="no") %>
            <p><td> <%= check_box_tag "files[]", file.id %></td><%= file.name %></p>       

        <% else %>
....

routes.rb中:

resources :files do
      collection do             
        delete 'destroy_multiple'      
      end
    end

控制器:

 def destroy_multiple          

      @files = File.find(params[:files])    
      @files.each do |item|          
          item.destroy
       end    

  end

提前致谢。

2 个答案:

答案 0 :(得分:0)

你确实可以有多个提交按钮,你只需要给它们起名字:

<%= submit_tag "Delete selected", :name => 'delete' %>
<%= submit_tag "Analyse", :name => 'analyse' %>

然后,您可以检查控制器中commit param包含的内容并采取相应措施:

if params[:commit] == 'delete'
  # delete things
elsif params[:commit] == 'analyse'
  # analyse things
end

表格的其余部分将照常提交。

答案 1 :(得分:0)

这对我有用:

    <%= form_tag destroy_multiple_files_path, method: :get do %>
    <%= submit_tag "Delete selected", :name => 'delete' %>
    <%= submit_tag "Analyse", :name => 'analyse' %>

控制器:

if params[:commit] == 'Delete selected'
  # delete things
elsif params[:commit] == 'Analyse'
  # analyse things
end

routes.rb:

resources :files do
      collection do             
        get :destroy_multiple      
      end
    end