将另一个属性传递给 id 以外的参数
Passing another attribute to params other than the id
我想使用 params[:username]
.
从 params
访问我的 User
模型的 username
属性
在我的 user
模型上,我有
class User < ApplicationRecord
has_secure_password
validates :email, presence: true, uniqueness: { case_sensitive: false }
validates :username, presence: true, uniqueness: { case_sensitive: false }
validates :password, length: { minimum: 6 }, on: :create
def to_params
username
end
end
在 config/routes.rb
期间,我有:
Rails.application.routes.draw do
root "pages#home"
resources :users, path: "/", except: :index
end
这部分满足了我的要求。
产生的路线如下:
Prefix Verb URI Pattern Controller#Action
root GET / pages#home
users POST / users#create
new_user GET /new(.:format) users#new
edit_user GET /:id/edit(.:format) users#edit
user GET /:id(.:format) users#show
PATCH /:id(.:format) users#update
PUT /:id(.:format) users#update
DELETE /:id(.:format) users#destroy
其中 :id
部分输出 User
的 username
,因此我在访问用户主页时得到类似 /jim
的路由。
让我烦恼的是我在访问控制器上的 username
时必须使用 params[:id]
。此外,当我像这样嵌套资源时:
resources :users do
resources :posts
end
我得到一条类似 /users/:user_id/posts(.:format)
的路线,其中 :user_id
是 username
。
有什么方法可以设置它,使我的路线看起来像:
Prefix Verb URI Pattern Controller#Action
root GET / pages#home
users POST / users#create
new_user GET /new(.:format) users#new
edit_user GET /:username/edit(.:format) users#edit
user GET /:username(.:format) users#show
PATCH /:username(.:format) users#update
PUT /:username(.:format) users#update
DELETE /:username(.:format) users#destroy
当我想从 params
访问 username
时,我可以写 params[:username]
?
谢谢!
有关详细信息,请查看 rails 指南 overriding-named-route-parameters
像这样添加路线
Rails.application.routes.draw do
root "pages#home"
resources :users, path: "/", except: :index, param: :username do
resources :posts
end
end
我想使用 params[:username]
.
params
访问我的 User
模型的 username
属性
在我的 user
模型上,我有
class User < ApplicationRecord
has_secure_password
validates :email, presence: true, uniqueness: { case_sensitive: false }
validates :username, presence: true, uniqueness: { case_sensitive: false }
validates :password, length: { minimum: 6 }, on: :create
def to_params
username
end
end
在 config/routes.rb
期间,我有:
Rails.application.routes.draw do
root "pages#home"
resources :users, path: "/", except: :index
end
这部分满足了我的要求。
产生的路线如下:
Prefix Verb URI Pattern Controller#Action
root GET / pages#home
users POST / users#create
new_user GET /new(.:format) users#new
edit_user GET /:id/edit(.:format) users#edit
user GET /:id(.:format) users#show
PATCH /:id(.:format) users#update
PUT /:id(.:format) users#update
DELETE /:id(.:format) users#destroy
其中 :id
部分输出 User
的 username
,因此我在访问用户主页时得到类似 /jim
的路由。
让我烦恼的是我在访问控制器上的 username
时必须使用 params[:id]
。此外,当我像这样嵌套资源时:
resources :users do
resources :posts
end
我得到一条类似 /users/:user_id/posts(.:format)
的路线,其中 :user_id
是 username
。
有什么方法可以设置它,使我的路线看起来像:
Prefix Verb URI Pattern Controller#Action
root GET / pages#home
users POST / users#create
new_user GET /new(.:format) users#new
edit_user GET /:username/edit(.:format) users#edit
user GET /:username(.:format) users#show
PATCH /:username(.:format) users#update
PUT /:username(.:format) users#update
DELETE /:username(.:format) users#destroy
当我想从 params
访问 username
时,我可以写 params[:username]
?
谢谢!
有关详细信息,请查看 rails 指南 overriding-named-route-parameters
像这样添加路线
Rails.application.routes.draw do
root "pages#home"
resources :users, path: "/", except: :index, param: :username do
resources :posts
end
end