假如我有一个控制器,配置文件,它只有两个动作。第一个是list
,它只显示名称列表。我希望这些名称成为链接,然后将您带到显示完整个人资料的页面。所以我需要第二个动作view
,然后它可以提供一个参数来指示要查看的配置文件。
例如:我会访问/profile/list
,然后如果我想查看John的个人资料,我会点击他的名字,我应该转到/profile/view/john
。我的视图操作将读取john参数,然后进行相应的数据库查询。
我必须对routes.rb进行哪些更改才能实现此目的?欢呼声。
答案 0 :(得分:0)
我宁愿使用default:controller /:action /:id route来防止列表中有2个John的情况。
拥有您提到的自定义路线 编辑Routes.rb以包含一个新的
map.connect ':controller/:action/:user_name'
现在像profile / view / john这样的请求应该以“
”的形式与您联系@params = {:controller => "profile", :action=> "view", :user_name => "john"}
使用params [:user_name]值在控制器的视图操作中查找并显示相关记录。您还可以在网址的:user_name部分设置一些要求,例如:它必须匹配/ SomeRegexpToValidateNames /
map.connect ':controller/:action/:user_name',
:requirements => {:user_name => /\w+/}
答案 1 :(得分:0)
如果你想按名称识别个人资料,如“/ profile / view / john”你可以使用permalink_fu插件
http://www.seoonrails.com/even-better-looking-urls-with-permalink_fu
当名字重复时会让你免于麻烦......
答案 2 :(得分:-1)
如果模型是“用户”,则必须覆盖to_param方法。这将允许您返回用户的“id-name”而不是“id”。 (例如:/ profile / view / 23-john)
我知道,这不是你要求的,但这应该是一个简单的解决方案。
class User < ActiveRecord::Base
def to_param
"#{id}-#{name.gsub(/\W/, '-').downcase}"
end
end
只需在路由配置中添加一个简单的资源声明:
map.resources :users