如何向Ruby on Rails 分页插件 will_paginate 的链接插入其它参数

本文详细介绍了如何在Rails应用中使用WillPaginate gem为通过搜索表单返回的结果集进行分页,并提供了自定义分页链接参数的方法以适应复杂搜索条件。通过在视图中设置特定参数,确保控制器能够处理这些参数,实现更灵活的分页功能。

(适用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)
    end

end

然后,在视图文件里,根据你自己的搜索表单修改 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 里面设定的参数,你就可以在控制器里面对这些参数进行处理了。


内容概要:本研究聚焦于绿电直连型电氢氨园区的优化运行,提出一种集成绿色电力直接供给、电解水制氢及氢气合成氨工艺的综合能源系统架构。通过建立包含风光发电、电解槽、氨合成反应器、储氢罐、电网交互及多类型负荷在内的系统模型,综合考虑绿电直供优先、能量梯级利用与多能互补原则,构建以系统综合运行成本最小化为目标的优化调度模型。研究采用Matlab与Python工具进行算法求解和仿真分析,利用实际气象与负荷数据完成案例验证,评估了不同运行策略下系统的经济性、可再生能源消纳能力与碳减排效益,为新型电氢氨一体化园区的规划与运行提供了理论依据和技术支撑。; 适合人群:具备一定电力系统、新能源或化工背景的研究生、科研人员及从事综合能源系统规划与优化工作的工程技术人员。; 使用场景及目标:①用于科研学习,理解电-氢-氨多能转换系统的建模与优化方法;②为工业园区的低碳化、智能化改造提供技术参考与决策支持;③作为开发类似综合能源管理系统的理论基础。; 阅读建议:此资源包含完整的模型代码、数据与论文,使用者应结合代码仔细研读论文中的模型构建部分,重点关注目标函数与约束条件的设计逻辑,并尝试修改参数进行仿真,以深入掌握优化算法在实际系统中的应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值