1

各行のチェックボックスを表示する方法を理解しました。問題は、deteleアクションを使用してチェックされた行パラメーターをmessages_controllerに渡すために、form_tagを記述してタグを送信する方法を見つけることができないことです。削除アクションで何を書き込むか。

私を助けてください!

私の見解は

<table>
  <tr>
    <th>delete</th>
    <th>ID</th>
    <th>Read</th>
    <th>Date</th>
    <th>Sender</th>
    <th>Subject</th>
  </tr>


<% @messages.each do |m| %>
  <tr>
    <td><%= check_box_tag '', m.id, false, class: 'delete_multiple_checkbox', name: "conversations[]" %>
    <td><%= m.last_message.id %></td>
    <td><%= 'unread' if m.is_unread?(current_user) %></td>
    <td><%= m.last_message.created_at %></td>
    <td><%= m.last_sender.username %></td>
    <td><%= m.subject %></td>
 </tr>
<% end %>
</table>

コントローラは次のようになります(これによるとhttps://github.com/frodefi/rails-messaging/blob/master/app/controllers/messaging/messages_controller.rb

def trash
  conversation = Conversation.find_by_id(params[:id])
  if conversation
    current_user.trash(conversation)
    flash[:notice] = "Message sent to trash."
  else
    conversations = Conversation.find(params[:conversations])
    conversations.each { |c| current_user.trash(c) }
    flash[:notice] = "Messages sent to trash."
  end
  redirect_to messages_path(box: params[:current_box])
end

route.rb

Example::Application.routes.draw do



 root :to => "top#index" 
 devise_for :users, :controllers => { :registrations => "registrations" }

 get 'girls', :to => 'girls#index', :as => :user_root
 match '/girls/comment' => 'girls#comment', :via => :post
 get "girls/show"
 resources :girls
 resources :home

 devise_for :users do get 'logout' => 'devise/sessions#destroy' end

 resources :girls do 
   collection do
     get 'tag'
   end
 end


  resources :contacts
  resources :user_profiles

  match 'messages/new/:username', :to => 'messages#new'



  get "messages/sent"
  get "messages/trash"
  get "messages/received"
  get "messages/show"
  get "messages/trash"
  match '/messages/deliver' => 'messages#deliver', :via => :post


end
4

2 に答える 2

4

要件に合うように、以下にリストされている構文を変更します。

Model.where(:id => [1,2,3,4,5]).destroy_all

また

Model.where(id: params[:id]).destroy_all
于 2014-09-17T12:44:51.330 に答える
1

あなたがしなければならないのは、メッセージレンダリングブロック全体をform_tagでラップし、好きな場所にsubmit_tagを追加することです。私はあなたのコントローラーが空白の名前空間の下のMessagesControllerであり、アクションがゴミ箱であると仮定しました。コントローラがメッセージング名前空間の下にある場合は、:controller =>:messagesを:controller =>'messaging/messages'に変更することをお勧めします。

   <% form_tag :url => { :controller => :messages, :action => :trash}, :method => :delete do %>
      <% @messages.each do |m| %>
        <tr>
          <td><%= check_box_tag '', m.id, false, class: 'delete_multiple_checkbox', name: "conversations[]" %>
          <td><%= m.last_message.id %></td>
          <td><%= 'unread' if m.is_unread?(current_user) %></td>
          <td><%= m.last_message.created_at %></td>
          <td><%= m.last_sender.username %></td>
          <td><%= m.subject %></td>
       </tr>
      <% end %>
      <%= submit_tag "Trash All Checked" %>
    <% end %>

また、routes.rbが指定されたルートのHTTPDELETEメソッドを受け入れると仮定しました。rake route | grep messagesで確認し、ルートが設定されていることを確認できます。そうでない場合は、次のように追加する必要があります。

resources :messages do
    collection do
         delete :trash
    end
end
于 2012-07-07T21:31:25.367 に答える