下面我给出了routes.rb的代码:
resources :analytics
namespace :analytics do
resources :users, only: [:show, :index]
end
在这里,我在controllers文件夹中有一个analytics_controller.rb,在Controllers文件夹中有一个包含这个users_controller.rb的Analytics文件夹
因此,每当我想转到http://localhost:3005/analytics/users访问users_controller的索引时,它只会将我发送到analytics_controller的show动作,因为它将“users”作为上述URL中的:id。
我该怎么办?我想同时保留analytics_controller的所有操作以及users_controller的操作。
答案 0 :(得分:0)
如果您希望路由器首先匹配分析/用户路径,则需要将命名空间放在资源之前:
namespace :analytics do
resources :users, only: [:show, :index]
end
resources :analytics
答案 1 :(得分:0)
请检查将使用
生成的路线localhost:3000/rails/info/routes
然后必须是users_controller必须是控制器/ analytics / users_controller.rb内的命名空间
class Analytics::UsersControllers < ApplicationController
end
UserController操作的路径应为
analytics_users_path & analytics_users_path(user_id)
答案 2 :(得分:0)
路由按照定义的顺序具有优先级。因此,如果您希望用户#index处理/analytics/users
,则需要先定义该路由。
namespace :analytics do
get 'users', to: "users#index"
end
resources :analytics
您似乎也不了解nested routes的工作原理。使用资源来定义嵌套路由会将analytics/:analytic_id/users
作为索引。
resources :analytics, only: [] do
resources :users, only: [:index]
end
Prefix Verb URI Pattern Controller#Action
analytic_users GET /analytics/:analytic_id/users(.:format) users#index
但这不是一种非常安静的方式来设置路线。我建议:
Rails.application.routes.draw do
namespace :users do
get :analytics, to: 'analytics#all'
end
resources :users, only: [] do
resources :analytics, module: :users, only: [:index]
end
end
将提供以下路线:
Prefix Verb URI Pattern Controller#Action
users_analytics GET /users/analytics(.:format) users/analytics#all
user_analytics GET /users/:user_id/analytics(.:format) users/analytics#index
这里的主要区别在于路由清楚地表明所表示的资源是属于用户或集合的分析。
使用module
选项发送&#34;嵌套&#34;路由到Users::AnalyticsController
并且是区分不同上下文的非常好的方法。
class Users::AnalyticsController
# Display all analytics for all users
# GET /users/analytics
def all
@users = User.all
@analytics = Analytic.where(user: @users)
end
# Display all analytics for a user
# GET /users/:user_id/analytics
def index
@user = User.includes(:analytics).find(params[:user_id])
@analytics = @user.analytics
end
end