0

在 Rails 中,默认行为在 url 中显示 id,如

http://0.0.0.0:3000/users/1

现在要更改 url 以显示除 id 以外的其他内容,我知道我可以将其放入模型中

def to_param
  name
end

然后得到类似的东西http://0.0.0.0:3000/users/mikey

我想知道如何实现 twitter 风格的 url。目前型号名称仍显示在 url 中。像这样http://0.0.0.0:3000/mikey没有型号名称的东西

4

2 回答 2

0
  1. 获取存储用户名的数据库列的名称(假设它是“名称”)。

  2. 在 config/routes.rb 添加,在默认路由上方的某处:

    match 'users/:name', :controller => 'users', :action => 'show'
    
  3. 现在,在 users_controller 中,找到 def show 并将其更改为:

    @user = User.find_by_name(params[:name])
    
  4. 最后,所有指向用户的基于 id 的 url 都需要更新以反映基于名称的更改。就像您的用户 index.html.erb 文件一样。

    link_to @user.name, 'users/#{@user.name}'
    
于 2013-06-10T04:56:33.467 回答
0

在您的路线文件底部附近添加一条路线(就在您的根路线上方!)

get '/:id', :to => "users#show", :as => :friendly_user

这将作为一条直通路线,因此/anything未被较早路线捕获的路线将相应地路由users#show并通过:id。然后,您可以使用friendly_user_path(@user)生成指向该用户 Twitter 样式配置文件的链接。

确保这是优先级最低的路线之一,因为您不希望用户能够使用“注销”之类的用户名注册并/logout用他们的个人资料替换您的页面!

于 2013-06-10T05:04:30.233 回答