【问题标题】:Use Ransack sort_link for non-attributes对非属性使用 Ransack sort_link
【发布时间】:2012-10-01 14:41:25
【问题描述】:

我在我的 rails 项目中使用 Ransack 的 sort_link 来显示我的 payment 模型的费用列表。但是,'fee_amount'并不是payment模型的一个属性,而是bill模型的一个类方法(属于payment)。我目前拥有的是:

它应该访问当前paymentbill并调用该bill上的'fee_amount'方法,它会进行一些计算并返回一个浮子。我希望搜索的正是这些花车。

这可以做到吗,还是我只能按我正在处理的模型的属性排序?

【问题讨论】:

    标签: ruby-on-rails-3 ransack


    【解决方案1】:

    你不能用它来搜查,但检查this issue。似乎有人为这个功能做了补丁,但我没有尝试过。

    Ransack,在内部,它总是使用数据库中定义的模型,我无法让它使用作用域创建的临时表。

    PD:重新修改评论作为答案,因为我总是回到这个问题:P

    【讨论】:

      【解决方案2】:

      Ransack 是 MetaSearch 的继承者,根据 MetaSearch 文档,您可以创建自定义搜索。这是链接:

      https://github.com/ernie/meta_search

      我认为这样的事情会起作用:

      scope :sort_by_bill_fee_amount_asc, joins(:bill).select('sum("bills"."fee_amount") AS bill_fee_amount').order('bill_fee_amount ASC')
      scope :sort_by_bill_fee_amount_desc, joins(:bill).select('sum("bills"."fee_amount") AS bill_fee_amount').order('bill_fee_amount DESC')
      

      这个问题不清楚计算的确切内容,所以我认为它只是一个名为 fee_amount 的字段的总和。不幸的是,它可能比这更糟糕,我认为讨厌的 SQL 计算需要包含在 Payment 模型中。

      我认为关键点是 SQL 需要包含您正在排序的列,因此您需要让 SQL 计算它并将其包含在 Ransack 想要搜索的名称中。

      希望对你有帮助。

      【讨论】:

      • 查看issue。 Ransack 没有与 meta_search 相同的功能。在内部,它总是使用数据库中定义的模型,我不能让它使用范围创建的临时表
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      • 1970-01-01
      • 1970-01-01
      • 2014-05-27
      相关资源
      最近更新 更多