我想要复制推特个人资料页面并使用一个名为“http://www.my-app.com/username”的网址,而我可以手动将其输入地址栏并导航到个人资料页面我无法链接到自定义URL。
我认为问题出在路线上 - 这是我的routes.rb中的代码
map.connect '/:username', :controller => 'users', :action => 'show'
另外,我有Question
和Answer
个模型,我希望使用自定义网址链接到它们,如下所示:
答案 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; '组合'