【问题标题】:How do I use the ransack gem to sort a table based on a model's instance method?如何使用 ransack gem 根据模型的实例方法对表进行排序?
【发布时间】:2020-10-12 23:15:42
【问题描述】:

我正在使用 Rails 和 ransacker gem (2.3.2) 构建一个可按列名过滤的表。我想根据帐户电子邮件地址的第一个成员过滤帐户。模型和实例方法如下所示:

class Account
 has_many :members

 def first_member_email
   members.order(created_at: :desc).first.email
 end
end

class Member
 belongs_to :account
end

我打算使用 Ransack 的“sort_link”根据账户的 first_member_email 实例方法进行排序。基于documentation,似乎使用ransacker 是要走的路。像这样的:

ransacker :first_member_email do |parent|
      Arel.sql(something)
 end

在视图中:

th=sort_link @q, :first_member_email, 'Created By'

但我无法让 Arel 工作。这里的查询是什么让这个工作,或者有没有使用 Arel 的另一种方法?

【问题讨论】:

    标签: ruby-on-rails ransack arel


    【解决方案1】:

    你可以这样做:

    # app/models/account.rb
    
    class Account < ApplicationRecord
      scope :sort_by_first_member_email_asc, -> { sort_by(&:first_member_email) }
      scope :sort_by_first_member_email_desc, -> { sort_by(&:first_member_email).reverse }
    end
    

    如果您愿意,您可以在范围内编写自定义查询。谢谢:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-05
      • 1970-01-01
      • 2011-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-11
      相关资源
      最近更新 更多