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)
路由从上到下按顺序测试。您为 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,但这是一个单独的主题。
我有简单的控制器和路由文件。 在我的路线和控制器中,我创建了一个模块。我写了一个简单的方法来重定向我的节目。我不知道为什么。
控制器
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)
路由从上到下按顺序测试。您为 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,但这是一个单独的主题。