模型的虚荣URL

时间:2014-04-25 19:51:54

标签: 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 "/:username" => "users#show", via: :get

2 个答案:

答案 0 :(得分:0)

您的路由会生成一个用户名参数,无论它是否实际上是您传入的用户名或ID。因此,在您的控制器中,您不应该尝试使用params[:id]。除此之外,我发现您的代码没有任何问题。

答案 1 :(得分:0)

试试这个: -

get ':id', to: 'users#show', constraints: lambda { |request| User.where(:username => request.path_parameters[:id]).exists? }

用户控制器

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