【问题标题】:Rails will_paginate custom routeRails will_paginate 自定义路由
【发布时间】:2011-01-27 08:26:27
【问题描述】:

如何将 will_paginate 与自定义路由一起使用?

我的路线中有以下内容:

map.connect 'human-readable/:name', :controller => :tags, :action => 'show'

但据我所知 will_paginate 使用 url_for,但我想使用“人类可读”而不是 url_for,但是如何?

编辑

当我点击will_paginate生成的分页链接时,它正在使用:

"tags/show?name=Elektronikindustri&page=1"

代替:

"/human-readable/show?name=Elektronikindustri&page=1"

我希望will_paginate 使用我的自定义路由而不是实际的控制器名称

【问题讨论】:

  • 当我单击 will_paginate 生成的分页链接时,它使用的是 tags/show?name=Elektronikindustri&page=1 而不是 '/human-readable/show?name=Elektronikindustri&page=1' - 我该如何更改? 'human-readable' 在我的路由文件中,如下所示: map.connect 'human-readable/:name', :controller => :tags, :action => 'show' 我希望 will_paginate 使用我的自定义路由而不是实际控制人姓名

标签: ruby-on-rails will-paginate


【解决方案1】:

will_paginate 视图助手有一个 :params 选项用于覆盖默认链接生成。

更改您的路线配置:

map.human_readable_tag '/human-readable/:name', 
     :controller => :tags, :action => 'show'

调用will_paginate视图助手如下:

<%= will_paginate @tag_list, 
     :params => {:controller => human_readable_tag_path(@tag_name) } %>

确保您已在控制器中设置 @tag_name 变量。

更多信息请阅读will_paginate view helper documentation

传递给助手的:params 选项用于调用url_for。所以请阅读url_fordocumentation,了解我们如何伪造控制器名称。

【讨论】:

    【解决方案2】:

    另一种选择是在 will_paginate 中使用 param,但像这样传递参数:

    <%= will_paginate @products, :params => {:controller => 'human-readable', :action => 'show', :name => 'xyz'} %>
    

    现在您的链接将看起来像人类可读/xyz?page=2...

    【讨论】:

      【解决方案3】:

      你也需要定义这条路线

      
      map.connect 'human-readable/:name', :controller => :tags, :action => 'show'
      map.connect 'human-readable/:name/page/:page', :controller => :tags, :action => 'show'
      

      【讨论】:

      • 非常感谢,我如何让 will_paginate 来接这个?它还在使用“标签”吗?当我点击分页中的链接时,它仍在使用“标签”而不是“人类可读”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 2012-09-05
      • 2011-06-05
      • 1970-01-01
      • 2019-07-26
      相关资源
      最近更新 更多