代码之家  ›  专栏  ›  技术社区  ›  Brian

ruby on rails将对路由分页

  •  0
  • Brian  · 技术社区  · 14 年前

    我试图为will paginate插件设置路径,所以我没有?page=1位于url的末尾,因此我可以稍后尝试使用页面缓存。

    我一直在网上浏览,我发现一些教程解释了如何使用map.connect,但是,我在使用我的应用程序时遇到了问题。

    下面是一个URL示例: 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 回复  |  直到 14 年前
        1
  •  0
  •   Jaime Bellmyer    14 年前

    看看你的路线,你可能会穿过两个不同的地方。你在翻页什么?如果是配置文件,则不需要提供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/ 是指用户自己的配置文件。首先,这是危险的,因为你不希望人们改变应用程序认为他们是什么样的个人资料,只是通过手动改变身份证号码。依靠任何东西 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 profile_browse_path(:id => 1, :page => 10)