更改默认的rails路由

时间:2013-06-10 04:42:27

标签: ruby-on-rails-3 routes

在rails中,默认行为显示网址中的ID,如

http://0.0.0.0:3000/users/1

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

def to_param
  name
end

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

的内容

我想知道如何实现Twitter风格的网址。目前,模型名称仍显示在网址中。像这样的http://0.0.0.0:3000/mikey没有模型名称

2 个答案:

答案 0 :(得分:0)

  1. 获取存储用户姓名的数据库列的名称(假设它是'name')。

  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的网址,以反映基于名称的更改。就像你的用户index.html.erb文件一样。

    link_to @user.name, 'users/#{@user.name}'
    

答案 1 :(得分:0)

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

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

这将作为一个直通路线,因此未被先前路线捕获的/anything将路由到users#show并相应地传递:id。然后,您可以使用friendly_user_path(@user)生成指向该用户的Twitter风格配置文件的链接。

请确保这是优先级最低的路线之一,因为您不希望用户使用“退出”等用户名注册,并将您的/logout页面替换为其个人资料!