如何使用搜索 gem 根据模型的实例方法对 table 进行排序?
How do I use the ransack gem to sort a table based on a model's instance method?
我正在使用 Rails 和掠夺者 gem (2.3.2) 构建一个可按列名过滤的 table。我想根据该帐户电子邮件地址的第一个成员来过滤该帐户。模型和实例方法如下所示:
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 :first_member_email do |parent|
Arel.sql(something)
end
并且在视图中:
th=sort_link @q, :first_member_email, 'Created By'
但我无法让 Arel 工作。这里的查询是什么来让它工作,或者有没有不使用 Arel 的其他方法?
你可以这样做:
# 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
如果需要,您可以在范围内编写自定义查询。谢谢:)
我正在使用 Rails 和掠夺者 gem (2.3.2) 构建一个可按列名过滤的 table。我想根据该帐户电子邮件地址的第一个成员来过滤该帐户。模型和实例方法如下所示:
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 :first_member_email do |parent|
Arel.sql(something)
end
并且在视图中:
th=sort_link @q, :first_member_email, 'Created By'
但我无法让 Arel 工作。这里的查询是什么来让它工作,或者有没有不使用 Arel 的其他方法?
你可以这样做:
# 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
如果需要,您可以在范围内编写自定义查询。谢谢:)