如何在Rails 3中使用example.com/username而不是example.com/user/1?

时间:2011-05-19 09:21:44

标签: ruby-on-rails-3 routing

如何修改从http://localhost:3000/profiles/1http://localhost:3000/myusername的路由?

我有一个配置文件模型,包含下表:

def self.up
    create_table :profiles do |t|
      t.string :username
      t.text :interest

      t.timestamps
    end
 end

我的routes.rb文件:

  resources :profiles

我查看了与to_paramdevisenested loop甚至an example in Rails 2.3相关的类似答案,但我找不到合适的方式。

我应该对profile/view/show.html.erbroutes.rbmodel/profile.rb(如果有)进行哪些更改,以修改从http://localhost:3000/profiles/1http://localhost:3000/username的路由?我正在学习基础知识,因此我宁愿不使用任何宝石或插件。

2 个答案:

答案 0 :(得分:5)

如果您想使用用户名而不是ID,请尝试friendly_id gem。

如果您想自己动手,最简单的方法是在模型中覆盖方法to_param以返回用户名,然后在用户名中搜索您的控制器。

模特:

def to_param
  username
end

在控制器中:

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

在routes.rb文件中:

  match '/:id' => 'profiles#show'

答案 1 :(得分:1)