如何编辑Ransack的“sort_link”方法的输出?

时间:2014-10-19 01:33:14

标签: ruby-on-rails ruby ransack

作为Ruby on Rails的总菜单,我希望,这是一个相当简单的问题。

我正在使用Ransack gem为我网站的搜索栏提供支持,并且有很多很棒的方法。其中一个是sort_link方法,它通过单击元素使我的结果表可以排序。

唯一的问题是,当它排序时,它会在列标题名称之后注入 ▼(或 ▲)。

我要做的就是将此输出编辑为<span>▲</span><span>▼</span>。在到处寻找甚至在#rubyonrails IRC中询问问题后,我似乎找不到自定义此输出的方法。

作为一个权宜之计,我已经编写了一些javascript来直接操作DOM,但它只是一种肮脏的方法,特别是在自定义网站中!

这里的任何帮助都很棒。

谢谢!

1 个答案:

答案 0 :(得分:1)

这里他们在Ransack gem source on GitHub

# lib/ransack/constants.rb:5-6

module Ransack
  module Constants
    ASC = 'asc'.freeze
    DESC = 'desc'.freeze
    ASC_ARROW = '&#9650;'.freeze   # <- ascending arrow
    DESC_ARROW = '&#9660;'.freeze  # <- descending arrow
# ..snipped..

要切换箭头指示,请将文件复制到您的应用程序中:/lib/ransack/constants.rb并交换两个HTML实体(或只是交换ASC_ARROWDESC_ARROW)。


修改

要添加span标记并删除不间断空格,我们将修改处理这两者的辅助方法。

this file中,我们将采用此辅助方法

# lib/ransack/helpers/form_helper.rb:143
def link_name(label_text, dir)
  [ERB::Util.h(label_text), order_indicator_for(dir)]
  .compact
  .join(Ransack::Constants::NON_BREAKING_SPACE)
  .html_safe
end

并将其修改为:

  • 将订单指示箭头换入span标记
  • 删除nbsp;

raw file复制到您的应用程序(到 /lib/ransack/helpers/form_helper.rb )并将此方法更改为:

# lib/ransack/helpers/form_helper.rb:143
def link_name(label_text, dir)
  [ERB::Util.h(label_text), content_tag(:span, order_indicator_for(dir))]
  .compact
  .html_safe
end