Ruby on Rails将对路径进行分页

时间:2010-10-21 22:01:54

标签: ruby-on-rails

我正在尝试为will paginate插件设置我的路由,所以我在url的末尾没有?page = 1,所以我稍后可以尝试使用页面缓存。

我一直在网上浏览,我发现一些教程解释使用map.connect,但是,我无法使用我的应用程序。

以下是一个示例网址:http://localhost:3000/profile/1/browse?page=1

这是我到目前为止所获得的路线代码:

map.connect '/profile/:id/browse/:page', 
:controller => 'profiles',
:action => 'browse',
:id => /\d+/,
:page => /\d+/

这不起作用。有没有人有任何建议?

我认为map.connect是模式匹配,但也许我错过了一些东西。

谢谢,

1 个答案:

答案 0 :(得分:0)

看着你的路线,你可能正在穿越两件不同的东西。你有什么分页?如果是配置文件,则无需提供ID。我们假设您正在尝试对配置文件进行分页。你的路线看起来像这样:

map.connect '/profiles/browse/:page', 
  :controller => 'profiles',
  :action => 'index',
  :page => /\d+/

你的控制器动作看起来像这样:

def index
  @profiles = Profile.paginate :page => params[:page]
end

如果您尝试在个人资料中嵌套内容,比如浏览个人资料的图片,则需要更多这样做:

map.connect '/profiles/:id/browse/:page', 
  :controller => 'profiles',
  :action => 'index',
  :id => /\d+/,
  :page => /\d+/

与你的控制器一样:

def index
  @profile = Profile.find(params[:id])
  @pictures = @profile.pictures.paginate :page => params[:page]
end

让我知道这是否有效。

更新:

您在评论中列出/profile/1/指的是用户自己的个人资料。首先,这是危险的,因为您不希望人们更改应用程序认为它们的配置文件,只需手动更改该ID号。依靠您的身份验证为您提供的任何current_user方法。

但是,以当前设置为例,这就是它的样子:

map.connect '/profiles/:id/browse/:page', 
  :controller => 'profiles',
  :action => 'browse',
  :id => /\d+/,
  :page => /\d+/

与你的控制器一样:

def browse
  @profile = Profile.find(params[:id])
  @profiles = Profile.paginate :page => params[:page]
end

如果您仍有疑问,请与我联系。

更新2

为了获得一个好的link_to,请将路线更改为指定的路线:

map.profile_browse '/profiles/:id/browse/:page', 
  :controller => 'profiles',
  :action => 'browse',
  :id => /\d+/,
  :page => /\d+/

现在您可以这样致电link_to

link_to profile_browse_path(:id => 1, :page => 10)