我正在尝试替换此类用户个人资料视图
/users/1
和
/username
我知道这意味着我需要检查各种碰撞。我已经咨询了以下类似的 SO 问题:
以下是我尝试过的各种失败的 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 Bigg 进行更改后,我在创建新配置文件时重定向到配置文件时遇到了路由问题。这是我的创建代码:
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 方法也不起作用,因为如果覆盖 to_param 不能解决这个问题,它们的重定向会转到“users/1/edit”而不是“username/edit”。