如何使用ransack gem按模型方法排序

时间:2017-07-13 20:23:51

标签: ruby-on-rails ruby associations arel ransack

我已经在我的rails应用程序中实现了Ransack gem,我正在使用它来搜索/排序表。但是,有几个区域需要按模型方法返回的整数进行排序。

根据我的阅读和研究,为了在Ransack中实现这一点,我必须创建一个基本上将模型方法转换为Arel的ransacker方法。我没有Arel的经验,但一直在研究它。

任何人都可以帮我弄清楚我需要使用什么样的Arel,或者如何最好地创建一个能够满足我需要的搜索者?

型号:

    def highest_mileage
        high_mileage = Expense.where("vehicle_id = ? and vehicle_mileage IS NOT NULL", self.id).maximum("vehicle_mileage")
        mileage = (high_mileage.nil? ? 0 : high_mileage)
        return mileage
    end

Index.html.haml:

    %table
      %thead
        %tr
          %th = sort_link(@q, :highest_mileage)

我尝试了几种不同的方式来实现自定义搜索,但由于我缺乏Arel知识,我很快就会出现问题。以下是关于我试图重现它的内容。

    ransacker :highest_mileage do |parent|
      expense_item = ExpenseItem.arel_table
      a = expense_item.project(expense_item[Arel.star]).where(expense_item[:vehicle_id].eq(parent.table[:vehicle_id]))

代码尚未完成,因为我不确定如何在Arel中执行后续步骤。老实说,我确信我的做法也不正确。

感谢任何帮助。

0 个答案:

没有答案