Ruby on rails 虚荣网址';s代表模型

Ruby on rails 虚荣网址';s代表模型,ruby-on-rails,ruby,url,routes,Ruby On Rails,Ruby,Url,Routes,我想在我的应用程序中将虚荣URL添加到模型中。理想情况下,如果用户没有用户名,我希望返回到ID。这是我构建的当前解决方案,但它不起作用 User.rb def to_param username || id end 用户控制器 @user = if params.key?(:username) User.find_by_name(params[:username]) else User.find(params[:id]) end 路线 match "/:us

我想在我的应用程序中将虚荣URL添加到模型中。理想情况下,如果用户没有用户名,我希望返回到ID。这是我构建的当前解决方案,但它不起作用

User.rb

  def to_param
     username || id
  end
用户控制器

@user = if params.key?(:username)
    User.find_by_name(params[:username])
else
    User.find(params[:id])
end
路线

match "/:username" => "users#show", via: :get

无论您传入的是用户名还是ID,路由都会生成用户名参数。因此,在控制器中,您不应该尝试使用
params[:id]
。除此之外,我看不出你的代码有什么问题。

试试这个:--

用户控制器

@user = User.find_by_username(params[:id])
unless @user
  @user = User.find(params[:id])
end

使用友好的\u id gem:
find\u by\u x
方法已被弃用一段时间,您应该使用
where(username:params[:username])。首先,如果您解释了哪些方法不起作用,可能会很有用。
@user = User.find_by_username(params[:id])
unless @user
  @user = User.find(params[:id])
end