Rails 路由:GET 方法重定向到显示方法

Rails routes: GET method redirecting to show method

我有简单的控制器和路由文件。 在我的路线和控制器中,我创建了一个模块。我写了一个简单的方法来重定向我的节目。我不知道为什么。

控制器

  module Seller
    class CampaignsController < Seller::BaseController

      before_action :confirm_logged_in

      def viewAllCampaigns
       @campaigns = Campaign.all

      end

      def show
      end

    end

  end

路由文件

 scope module: 'seller' do
   #namespace :power do
   resources :dashboard, only: [:index]
   resources :sessions, only: [:create, :destroy]
   resources :campaigns, only: [:index, :create, :show, :update, :destroy]   
   get 'viewAllCampaigns' => 'campaigns#viewAllCampaigns'   
 end

输出

Started GET "/campaigns/viewAllCampaigns" for 127.0.0.1 at 2015-10-12 17:39:43 +0500
  Processing by Seller::CampaignsController#show as HTML
  Parameters: {"id"=>"viewAllCampaigns"}
  Rendered seller/campaigns/show.html.erb (0.1ms)

我正在浏览器中点击 http://localhost:3000/campaigns/viewAllCampaigns

路由从上到下按顺序测试。您为 campaigns 资源添加的 show 路由将查找 url 与此模式匹配的路由:

/campaigns/:id

/campaigns/viewAllCampaigns 与此匹配,因此它将执行 show 操作。, params[:id] = "viewAllCampaigns"

将特殊情况路由移到 resources#campaigns 路由上方以解决此问题,然后它将首先捕获 url。

get 'viewAllCampaigns' => 'campaigns#viewAllCampaigns'   
resources :campaigns, only: [:index, :create, :show, :update, :destroy]   

理想情况下,您的 routes 应该这样定义。

resources :campaigns, only: [:index, :create, :show, :update, :destroy] do  
   get 'viewAllCampaigns', on: :collection   
end

routes.rb 文件的第一条评论是 The priority is based upon order of creation: first created -> highest priority. 这就是您的路线重定向到 show 的原因。 Rails 将此 url 视为 campain/:id

它将以下获取请求作为显示操作,因为显示需要 campaigns/:id,并且假设 'viewAllCampaigns' 在这种情况下是一个 id:

/campaigns/viewAllCampaigns

您的 link_to 应该指向以下内容:

'/viewAllCampaigns'

您的路由结构并不是真正的 RESTful,但这是一个单独的主题。