2012-07-19 88 views
0

我可以在没有任何问题的情况下取消所有在索引视图中检查的消息。
但是在显示视图中,生成的链接显示到/messages/discard.3 的链接,这3个可以是ID。如何正确设置路由

我该如何让它工作?它应该被链接到消息/丢弃/ 3

我的文件是这样的

的routes.rb

get "messages/received" 
    get "messages/sent" 
    get "messages/trash" 
    get 'messages/:id' => 'messages#show', :as => :show_messages 

    match 'messages/new/:username', :to => 'messages#new', :as => :new_messages 
    match 'messages/deliver' => 'messages#deliver', :via => :post 
    match 'messages/discard' => 'messages#discard', :via => :post, :as => :discard_messages 
    match 'messages/untrash' => 'messages#untrash', :via => :post 

视图1(index.html.erb)

<%= form_tag(:action=> discard) do %> 
    <% @messages.each do |m| %> 
     <tr> 
     <td><%= check_box_tag "checked_items[#{m.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 %></td> 
     <td><%= m.last_sender.username %></td> 
     <td><%= link_to m.subject, show_messages_path(m) %></td> 
     </tr> 
    <% end %> 

视图2(show.html.erb)

<%= link_to 'Trash', discard_messages_path(@messages) %> 

messages_controller.rb

def discard 
     conversation = Conversation.find_all_by_id(params[:checked_items].keys) 
    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 

回答

0

你可以尝试将其更改为:

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

不过,我想你应该对您的所有路由改变什么:

resource :messages do 
    member do 
    #code 
    end 

    collection do 
    #code 
    end 
end 

这是更容易阅读和维护

+0

谢谢!我改变了你的第一个建议。但它表示路由错误没有路由匹配{:action =>“discard”,:controller =>“messages”} :( – MKK 2012-07-19 12:32:14