我想在我的应用程序中为模型添加虚荣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
答案 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