如何向Ruby on Rails 分页插件 will_paginate 的链接插入其它参数
来源:互联网 发布:php 源码加密 代码 编辑:程序博客网 时间:2024/06/06 00:03
(适用3.0版will_paginate)
WillPaginate是RoR里很方便的一个分页用的gem,例如在控制器里面写
@posts = Post.paginate(:page => params[:page])
然后在视图里面写
<%= will_paginate @posts %>
就可以自动给Post对象分页显示了。
不过如果你想给一个通过搜索表单返回的搜索结果进行分页,使用will_paginate就不那么方便了,因为它不会在它的链接里自动附上搜索参数,这样除非你的模型里面明确定义了搜索方法(参考 https://github.com/mislav/will_paginate/wiki/Simple-search ),否则对一些复杂的搜索条件(例如你需要组合一些搜索条件)就无能为力了。
当然 will_paginate 考虑到了大家的需求,所以你可以通过覆盖它的 WillPaginate::ActionView::LinkRenderer 类里的方法来给它的分页链接添加额外参数。
(这里给出的方式参考了国外网友对3.0以下will_paginate的hack)
首先,在 app/helpers 下创建文件 remote_link_renderer.rb :
# This class intends to add extra URL request parameters in pagination links# Usage:# <%# search_params = {:search => @search,# :page_num => @page,# :serial => @serial,# :code => @code,# :rule => @rule# }# %> # <%= will_paginate @codes, :renderer =>'RemoteLinkRenderer', :remote => search_params %>#class RemoteLinkRenderer < WillPaginate::ActionView::LinkRenderer def prepare(collection, options, template) @remote = options.delete(:remote) || {} super end private def link(text, target, attributes = {}) if target.is_a? Fixnum attributes[:rel] = rel_value(target) target = url(target) end # here to compose key-value pairs to one string like "&key1=value1&key2=value2" string_remote = @remote.inject('') do |attrs, pair| unless pair.last.nil? attrs << %(&#{pair.first}=#{CGI::escapeHTML(pair.last.to_s)}) end attrs end # append the extra parameters to target attributes[:href] = target.to_s + string_remote tag(:a, text, attributes) endend
然后,在视图文件里,根据你自己的搜索表单修改 search_params 内容
<% search_params = {:search => @search, :rule => @rule, :registered => @registered, :reservation => @reservation, :reg_uid => @reg_uid} %> <%= will_paginate @posts, :renderer =>'RemoteLinkRenderer', :remote => search_params %>
注意这里特地指定了 :renderer =>'RemoteLinkRenderer' 。这样你的分页链接里面都会附上你在 search_params 里面设定的参数,你就可以在控制器里面对这些参数进行处理了。
- 如何向Ruby on Rails 分页插件 will_paginate 的链接插入其它参数
- Rails使用will_paginate插件进行分页
- ruby on rails中的分页插件Kaminari
- Ruby on Rails,通过页面链接向Controller中传递参数,附赠调试技巧
- rails 分页 will_paginate 的相关用法
- ruby on rails 通过链接跳转传递参数
- Rails分页plugin之will_paginate
- ruby on rails 安装插件
- ruby will_paginate的用法
- rails中will_paginate插件,当前页的使用
- Ruby on Rails应用软件的相关Eclipse插件
- Ruby On Rails框架下的翻页/排序插件
- Ruby On Rails 框架下的常用插件介绍 --- haml
- 针对Ruby on Rails开发的Emacs插件
- ubuntud下的vim插件(Ruby on rails)
- ruby on rails 关于update参数获取不到的问题
- rails will_paginate分页排序及显示
- rails 中will_paginate-bootstrap做分页
- syslog日志服务器架设攻略
- Windows&&Ubuntu双系统机重装Windows后的Ubuntu恢复问题
- 盲源分离的略缩语
- Nginx架构和代码风格
- gets getche getch
- 如何向Ruby on Rails 分页插件 will_paginate 的链接插入其它参数
- SQL Server中经常会用到的与时间相关的函数
- 17个新手常见Python运行时错误
- iOS 推送通知的实现
- 2013.10.21 -2013.10.26学习总结
- 基于Flex访问Arcgis Server的rest API中的Geometry server 坐标转换(Project)
- CXF WebService整合Spring
- vs2008下MFC中采用ado连接MySQL(ODBC、非ODBC或C API方式)
- Android SDK R22 Caused by: java.lang.NoClassDefFoundError: