帮助Rails路由

时间:2009-03-30 11:29:50

标签: ruby-on-rails routes

假如我有一个控制器,配置文件,它只有两个动作。第一个是list,它只显示名称列表。我希望这些名称成为链接,然后将您带到显示完整个人资料的页面。所以我需要第二个动作view,然后它可以提供一个参数来指示要查看的配置文件。

例如:我会访问/profile/list,然后如果我想查看John的个人资料,我会点击他的名字,我应该转到/profile/view/john。我的视图操作将读取john参数,然后进行相应的数据库查询。

我必须对routes.rb进行哪些更改才能实现此目的?欢呼声。

3 个答案:

答案 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