【问题标题】:Change devise route from ID to Username将设计路线从 ID 更改为用户名
【发布时间】:2011-04-17 20:42:09
【问题描述】:

我尝试使用帖子更改指向用户名的路线。我知道这很简单,但由于某种原因,我目前无法计算它。我也尝试了设计文档页面上的所有内容。

Drawing username routes

我只想让路由布局使用用户名而不是 id 并且没有用户前缀。喜欢:

http://example.com/username

而不是

http://example.com/users/1

【问题讨论】:

    标签: ruby-on-rails-3 devise


    【解决方案1】:
    class User < ActiveRecord::Base
      def to_param
        username
      end
    end
    

    在你的控制器中制作

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

    而不是

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

    这将使您的路线像http://example.com/users/username

    要做出你想要的,你可以做这样的路线:

    resources :users, :path => '' do
      # nested resources...
    end
    

    所以,user_path(@user) 将使 url http://example.com/username 但这不是一个好习惯,因为它不是 REST。我建议你留下像http://example.com/users/username这样的网址

    【讨论】:

    • 我得到了这个结果,路由现在指向用户名,我用 find_by_username 调整了 UsersController#show,但仍然得到--找不到 ID=DanReynolds 的用户
    • 如果错误是确切的“找不到 ID=DanReynolds 的用户”,则尝试重新加载您的服务器或类似的东西,因为 find_by_username 不会引发 NotFound 错误,它只会引发评估 nil错误。或者你可以尝试类似@user = User.where(:username => params[:id]).first
    • 如果您使用资源而不是匹配每条路线,您将如何设置路线?
    • 如果您想忽略用户名 URL 中的大写字母,@user = User.find_by_username(params[:id].downcase)
    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多