Ransack计数排序顺序错误

时间:2015-01-26 13:50:48

标签: ruby-on-rails sorting ruby-on-rails-4 ransack

我正在使用Ransack Gem并通过计数器缓存进行计数排序。我的属性是一个整数。

我这样称呼它:

<%= sort_link(@q, :people_count, "PEOPLE") %>

我得到的排序输出是:

[PEOPLE ASC]

1
 2
 0
 0

[PEOPLE DESC]

0
 0
 2
 1

我希望 PEOPLE DESC 显示:

2
 1
 0
 0

任何人都可以帮忙吗?

---的更新 -----

经过一个多小时的搜索,我觉得我越来越近了:

首先我必须编辑我的观点:

<%= mycontact.people.count %>

<%= mycontact.people_count %>

这会将所有零改为零。

现在我的排序输出是:

[PEOPLE DESC]

零<  零  2
 1

然后我又做了一些挖掘,并在github上找到了这个问题的link,这解释了你必须添加NULLS LAST。

所以我将以下代码添加到 peoples_controller.rb

@q.result.except(:order).order("#{@q.sorts.first.attr_name} #{@q.sorts.first.dir} NULLS LAST")

我一开始很兴奋,因为它有效,但在重新启动我的服务器之后,我收到了以下错误:

未定义的方法`attr_name&#39;为零:NilClass

1 个答案:

答案 0 :(得分:0)

我不熟悉Ransack宝石;但是,我现在最终可能会使用它,因为我已经看到了它能做什么。

试试这个:

<%= sort_link(@q, :people_count, "PEOPLE", default_order: :desc) if :people_count > 0 %>

这些行中的某些内容应该为[PEOPLE DESC]提供以下输出:

2

1

然后你可以这样做:

<%= sort_link(@q, :people_count, "PEOPLE", default_order: :desc) where :people_count = 0 %>

以0为计数显示结果。

这种逻辑是否有意义?