0
  1. 表示ビューから: 表示されたメッセージの ID を渡してアクションを破棄し、メッセージを破棄したいと思います。

  2. インデックス ビューから: チェックしたメッセージの ID を渡してアクションを破棄し、一度にすべて破棄したいと思います。

しかし、複数をチェックしてインデックス ビューから送信しても、一度に 1 つのレコードしか破棄できません。
同じアクションで 1 と 2 の両方をアーカイブするにはどうすればよいですか????

ルート

  match 'messages/discard(/:id)' => 'messages#discard', :via => :post , :as => :discard_messages

インデックス ビュー

  <%= form_tag(:action => discard, :via => 'post') do %>   
   <% @messages.each do |m| %>
      <tr>
       <td><%= check_box_tag "id",m.id %></td>
       <td><%= m.last_message.id %></td>
       <td><%= 'unread' if m.is_unread?(current_user) %></td>
       <td><%= m.last_message.created_at.to_s(:jp) %></td>
       <td><%= m.last_sender.username %></td>
       <td><%= link_to m.subject, show_messages_path(:id => m, :breadcrumb => @box) %></td>
      </tr>
   <% end %>
   <%= submit_tag "discard", :class => 'btn' %>
  <% end %>

ビューを表示

<%= link_to 'Discard', discard_messages_path(@messages), :class => 'btn', :method => 'post'  %>

コントローラ

  def discard  
      conversation = Conversation.find_all_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 :back 
  end
4

1 に答える 1

0

html で [] 命名を使用すると、レールは params の配列として使用できるようになります

index.html.erb

<td><%= check_box_tag "message_id[]", m.id %></td>

コントローラ

# ...
else
  conversations = Conversation.where("id IN (?)", params[:message_id][])
  # ...

物事をさらに単純化するために、アクションの条件を削除し、2 つの別個のアクションを作成します

ルート

resource :messages do 
  member do
    post 'discard' # /messages/:id/discard
  end
  collection do
    post 'discard_all' # /messages/discard_all?message_id[]=1&message_id[]=22
  end
end
于 2012-07-22T16:32:35.393 に答える