使用用户名自定义rails url

时间:2010-02-16 00:22:02

标签: ruby-on-rails url routes

我想要复制推特个人资料页面并使用一个名为“http://www.my-app.com/username”的网址,而我可以手动将其输入地址栏并导航到个人资料页面我无法链接到自定义URL。

我认为问题出在路线上 - 这是我的routes.rb中的代码

map.connect '/:username', :controller => 'users', :action => 'show'

另外,我有QuestionAnswer个模型,我希望使用自定义网址链接到它们,如下所示:

http://www.my-app.com/username/question/answer/2210

4 个答案:

答案 0 :(得分:13)

你的路线没有问题。在定义所有其他路线之后,请记住最后定义它。我还建议使用RESTful路由,并且只有当您希望看到更好看的URL时才使用命名路由。不要使用map.connect。这是一些good reading about Rails routes

这是看起来如何:

map.resources :questions, :path_prefix => '/:username' do |question|
  question.resources :answers
end

map.resources :users

map.user '/:username', :controller => 'users', :action => 'show'

只是你可以延长的草案。

答案 1 :(得分:4)

要创建网址,您需要为您的用户模型定义to_param方法(read here)。

class User < ActiveRecord::Base
  def to_param 
    username
  end
end

答案 2 :(得分:1)

我知道这些问题已经过时了,但对某人有帮助。

您可以尝试以下方法。我在rails 4项目中使用过它,所有这些似乎都很有效。 as: :admin的原因是我在此范围之外还有一个resources posts。它会向助手调用添加admin,例如admin_posts_path

scope ":username", module: 'admin', as: :admin do
  get '', to: 'profiles#show'
  resources :posts
end

答案 3 :(得分:0)

我用过这样的

在视图部分

portfolio.user.name,:id =&gt; portfolio)%&gt;

并在rout.rb中

map.show_portfolio“portfolio /:username”,:action =&gt; 'show_portfolio',: controller =&gt; '组合'