0

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

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

我必须对 routes.rb 进行哪些更改才能发生这种情况?干杯。

4

3 回答 3

0

我宁愿使用默认的 :controller/:action/:id 路由来防止列表中有 2 个 John 的情况。

要拥有像您提到的自定义路线,请编辑 Routes.rb 以包含新路线

map.connect ':controller/:action/:user_name'

现在像 profile/view/john 这样的请求应该以

@params = {:controller => "profile", :action=> "view", :user_name => "john"}

使用 params[:user_name] 值在控制器的视图操作中定位并显示相关记录。您还可以对 url 的 :user_name 部分设置一些要求,例如它必须匹配 /SomeRegexpToValidateNames/

map.connect ':controller/:action/:user_name',
   :requirements => {:user_name => /\w+/}
于 2009-03-30T12:26:48.760 回答
0

如果您想按名称识别配置文件,例如“/profile/view/john”,您可以使用 permalink_fu 插件

http://www.seoonrails.com/even-better-looking-urls-with-permalink_fu

当名称重复时,这将使您免受麻烦...

于 2009-03-30T13:30:42.117 回答
-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
于 2009-03-30T11:55:06.027 回答