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

Say*_*nee 6 routing ruby-on-rails-3

如何修改路由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
Run Code Online (Sandbox Code Playgroud)

我的routes.rb档案:

  resources :profiles
Run Code Online (Sandbox Code Playgroud)

我已经看过类似的答案处理to_param,设计嵌套循环甚至Rails 2.3中的一个例子,但我找不到一种有效的方法.

我应该做什么改变profile/view/show.html.erb,routes.rb以及model/profile.rb(如果有的话)修改路由http://localhost:3000/profiles/1http://localhost:3000/username?我正在学习基础知识,因此我宁愿不使用任何宝石或插件.

小智 5

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

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

在模型中:

def to_param
  username
end
Run Code Online (Sandbox Code Playgroud)

在控制器中:

def show
  @user = User.find_by_username(params[:id])
end 
Run Code Online (Sandbox Code Playgroud)

在routes.rb文件中:

  match '/:id' => 'profiles#show'
Run Code Online (Sandbox Code Playgroud)