我试图取代的那种用户配置文件的意见
/users/1
同
/username
我知道这意味着我需要检查的各种冲突。 我请教以下类似的SO问题:
- Ruby on Rails的路由匹配用户名
- 定制导轨和用户名网址
- 路由Rails中使用户名的网址:
- 路由错误有:url中的用户名
这里有各种失败的routes.rb路由定义我试过,以及相关的错误:
match "/:username" => "users#show", via: "get"
这里的错误:
ActiveRecord::RecordNotFound in UsersController#show Couldn't find User without an ID app/controllers/users_controller.rb:7:in `show'
这里是我的相应users_controller:
6 def show 7 @user = User.find(params[:id]) 8 end
match "/:username" => 'users#show', :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'
相同的错误1。
match '/:username', to: 'users/:id', via: 'show'
服务器无法启动。
match "/:username" => redirect("/users/:id")
错误:
ActiveRecord::RecordNotFound in UsersController#show Couldn't find User with id=:id
任何想法,为什么我的路由工作不相同的方式,其他人谁问这个问题的是什么?
更新
只要把这个问题了意见,并把它的问题更干净。 使得通过下面@Ryan比格变化后,我在重定向有一个路由问题创建一个新的时剖析。 这里是我创建的代码:
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_param覆盖, 这工作了其他人 ,不工作我的应用程序? 我#UPDATE和#edit方法也没有工作,因为他们的重定向到“用户/ 1 /编辑”而不是“用户名/编辑”如果覆盖to_param不照顾这。