Ruby on rails 使用用户名而不是id,然后嵌套路由/users/:id/nest\u路由到/username/nested\u路由
您好,我有大量的路线,如下所示Ruby on rails 使用用户名而不是id,然后嵌套路由/users/:id/nest\u路由到/username/nested\u路由,ruby-on-rails,ruby,Ruby On Rails,Ruby,您好,我有大量的路线,如下所示 resources :users do resources :shipping_methods, only: [:new, :create, :edit, :update, :destroy] resources :cart_items, only: [:create, :index, :destroy] resources :relationships, only: [:create, :destroy] resources
resources :users do
resources :shipping_methods, only: [:new, :create, :edit, :update, :destroy]
resources :cart_items, only: [:create, :index, :destroy]
resources :relationships, only: [:create, :destroy]
resources :addresses, only: [:new, :create, :edit, :update, :destroy]
end
它们都产生了下面的路线
/users/:id/嵌套路由
例如,“编辑装运方法”视图会生成以下内容
resources :users do
resources :shipping_methods, only: [:new, :create, :edit, :update, :destroy]
resources :cart_items, only: [:create, :index, :destroy]
resources :relationships, only: [:create, :destroy]
resources :addresses, only: [:new, :create, :edit, :update, :destroy]
end
/users/1/shipping\u methods/11/edit
我如何使所有这些路线产生这种效果:
/username/nested_路线
例如,上面的“编辑装运方法”视图应生成以下内容:
/username/shipping\u methods/11/edit
这是一种方法。为用户
资源覆盖路径
,并为子资源使用集合
。它为您提供路径/:user\u id/shipping\u methods/new
resources :users, path: ':user_id' do
collection do
resources :shipping_methods, only: [:new, :create, :edit, :update, :destroy]
resources :cart_items, only: [:create, :index, :destroy]
resources :relationships, only: [:create, :destroy]
resources :addresses, only: [:new, :create, :edit, :update, :destroy]
end
end
覆盖到_param
方法,以便用户
模型在路由器中使用用户名
而不是id
def to_param
self.username.parameterize
end
要在子路由器中查找用户,请使用
user.find_by(username:params[:user\u id]
这是一种方法。为用户
资源覆盖路径
,并为子资源使用集合
。它为您提供路径/:user\u id/shipping\u方法/new
resources :users, path: ':user_id' do
collection do
resources :shipping_methods, only: [:new, :create, :edit, :update, :destroy]
resources :cart_items, only: [:create, :index, :destroy]
resources :relationships, only: [:create, :destroy]
resources :addresses, only: [:new, :create, :edit, :update, :destroy]
end
end
覆盖到_param
方法,以便用户
模型在路由器中使用用户名
而不是id
def to_param
self.username.parameterize
end
要在子路由器中查找用户,请使用
user.find_by(用户名:params[:user_id]
如果您有一个当前用户
方法,则创建一个不使用GET:id
参数的自定义路由,而使用当前用户.id
来查找用户发送方法。另一种方法是使用gem来创建漂亮的URL,比如如果您有当前用户
方法,则创建一个不使用的自定义路由不要使用GET:id
参数,而是使用current_user.id
来查找用户发送的方法。另一种方法是使用gem作为漂亮的URL,如