Ruby on rails 3 在Rails中按用户名正确路由短url
我正在尝试替换类似的用户配置文件视图Ruby on rails 3 在Rails中按用户名正确路由短url,ruby-on-rails-3,rails-routing,Ruby On Rails 3,Rails Routing,我正在尝试替换类似的用户配置文件视图 /users/1 与 /username 我知道这意味着我需要检查各种碰撞。我咨询了以下类似的SO问题: 以下是我尝试过的各种失败routes.rb路由定义以及相关错误: 匹配”/:username“=>“用户#显示”,通过:“获取” 以下是错误: ActiveRecord::RecordNotFound in UsersController#show Couldn't find User without an ID app/controll
/users/1
与
/username
我知道这意味着我需要检查各种碰撞。我咨询了以下类似的SO问题:
匹配”/:username“=>“用户#显示”,通过:“获取”
以下是错误:
ActiveRecord::RecordNotFound in UsersController#show
Couldn't find User without an ID
app/controllers/users_controller.rb:7:in `show'
这是我对应的用户\u控制器:
6 def show
7 @user = User.find(params[:id])
8 end
User.find(params[:username])
match”/:username“=>“用户#显示”,:as=>:profile
与上述错误相同match/:username“,:controller=>“users/:id”,:action=>“show”
Routing Error
uninitialized constant Users
Try running rake routes for more information on available routes.
match'/:username',:controller=>users',:action=>show'
Routing Error
uninitialized constant Users
Try running rake routes for more information on available routes.
与1相同的错误通过“show”将“/:username”匹配到“users/:id”
Routing Error
uninitialized constant Users
Try running rake routes for more information on available routes.
服务器未启动匹配”/:username=>重定向(“/users/:id”)
错误:
ActiveRecord::RecordNotFound in UsersController#show
Couldn't find User with id=:id
def create
@user = User.new(params[:user])
if @user.save
session[:user_id] = @user.id
flash[:success] = "Thank you for signing up."
redirect_to ('/'+@user.username)
#redirect_to @user, notice: "Thank you for signing up!"
else
render "new"
end
end
这是我的user.rb
def to_param
self.username
#username
end
然而,我认为应该与to_param更新一起使用的注释掉的重定向不起作用,而它上面丑陋的hackish重定向却起作用。为什么to_参数会被覆盖,而不是在我的应用程序上工作?我的#update和#edit方法也不起作用,因为如果覆盖到#param,它们的重定向将转到“users/1/edit”而不是“username/edit”。第一个方法是正确的,但不起作用,因为您仍在尝试在控制器内执行类似操作:
6 def show
7 @user = User.find(params[:id])
8 end
User.find(params[:username])
当您应该这样做时:
User.find_by_username!(params[:username])
第一个将尝试通过表的主键查找,第二个将正确地改为查询用户名字段。除了更新to_参数外,routes文件的底部还需要以下行:
resources:users,:path=>'/'
我明白了。你能解释一下当前控制器的风格有什么问题吗?我应该如何正确地思考另一个问题?Ryan,你已经非常彻底地回答了我的问题,但是我可以问一下如何命名重定向路线吗?我正在尝试这个方法,但它不起作用,在我的create user方法下:@user=user.new(params[:user]),如果@user.save redirect\u指向@user.username
无需担心---对于其他人来说,我用“redirect\u指向”/@user.username`@Mittenchops解决了这个问题:这太难看了。我要做的是重写用户模型上的参数,只返回username
,然后将重定向到@user
将重定向到正确的路径。我已经更新了,以跟随您的评论-您能告诉我为什么这不起作用吗<代码>重定向到@user尝试重定向到nil。