要在我的应用程序上查看用户页面,您必须输入其ID /user/2
。
如何使它username
在参数中使用其代替用户显示页面的id值?我希望它是/user/username
或/username
。
任何帮助,将不胜感激。谢谢!
路线:
get 'signup' => 'users#new'
get 'login' => 'sessions#new'
get 'logout' => 'sessions#destroy'
get 'edit' => 'users#edit'
get "/profile/:id" => "users#show"
get "profile/:id/settings" => 'users#edit'
get 'settings/:id' => 'users#settings'
resources :users do
resources :messages do
post :new
collection do
get :askout
end
end
collection do
get :trashbin
post :empty_trash
end
end
用户控制器:
def show
@user = User.find(params[:id])
end
根据我的经验,我发现最简单的方法是使用friendly_id gem。to_param
您可以设置ActiveRecord中的一种方法来定义模型的路由ID,但是如果您要使用的属性还不是URL友好的话,它将变得非常复杂。假设您的用户名不包含空格或其他URL“不友好”字符,则可以执行以下操作:
class User < ActiveRecord::Base
...
def to_param
username
end
...
end
但是请确保在您的控制器中找到按用户名输入的用户。
class UsersController < ApplicationController
...
def set_user
@user = User.find_by(username: params[:id])
end
end
请注意,如果into_param
中的值与数据库中的值不完全相同,则再次查找对象将变得更加困难。例如,如果您想用来name.parameterize
设置URL,例如/users/john-doe
当您的实际名称属性为时John Doe
,则必须找到一种方法来一致地“取消参数化”参数。或者,您可以创建一个新的数据库列,其中包含您要在url中创建的属性的唯一参数化字符串(称为“子段”)。这就是为什么我使用friendly_id的原因。它可以自动处理您的。
关于将用户路由到/username
,您有几种选择:
get ':id', to: 'users#show', as: 'show'
resources 'users', path: '/'
只要确保将这些路线放在路线文件的末尾即可。这样,如果您尝试通过执行index
操作SomeOtherModelsController
,/some_other_model
就不会试图找到用户名为“ some_other_model”的用户。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句