2013-05-13 2 views
0

Мне нужно иметь один check_box для нескольких целей. Например: у меня есть список файлов. Пользователь может выбрать некоторые из них для удаления или анализа.Ruby on Rails: одна check_box для нескольких submit_tag

У меня есть следующий код, но он принимает только один 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%> 

Я бы хотел, Я пробовал что-то подобное, но, конечно, это не сработало.

<% 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 

Спасибо заранее.

ответ

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 
0

Вы действительно можете иметь несколько кнопок отправки, вы просто должны дать им имена:

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

Вы можете проверить, что commit паров содержат в контроллере и действовать соответствующим образом:

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

Остальная часть формы будет представлена ​​как обычно.

+0

Если я передать переменную: имя, то я должен поймать его в контроллер также с параметрами [: name], не так ли? Я попробовал ваш вариант и вариант с: name вместо: commit. Он ничего не удаляет. Может ли быть связано с удалением «destroy multiple» на моих маршрутах? Я обновил свой вопрос – Tonja

Смежные вопросы