如何正确设置路线

Posted

技术标签:

【中文标题】如何正确设置路线【英文标题】:How to set up routes correctly 【发布时间】:2012-07-19 11:59:30 【问题描述】:

我可以毫无问题地清除索引视图中检查的所有消息。 但在显示视图中,生成的链接显示指向 /messages/discard.3 的链接 这 3 可能是 ID。

我怎样才能让它工作?它应该链接到messages/discard/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

【问题讨论】:

【参考方案1】:

你可以试试改成:

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

但我认为您应该做的是将所有路线更改为:

resource :messages do
  member do
    #code
  end

  collection do
    #code
  end
end

更容易阅读和维护

【讨论】:

谢谢!!我将其更改为您的第一个建议。但它说 Routing Error No route matches :action=>"discard", :controller=>"messages" :(

以上是关于如何正确设置路线的主要内容,如果未能解决你的问题,请参考以下文章

我如何以正确的方式获得活动路线?

如何在 Laravel 8 上获得正确的路线

Rails 6 路线 - 简单嵌套路线的正确方法

高德地图如何自行规划路线

设置修改配置文件的路线

如何仅在丢失的路线上将 Express.js 设置为 404?