ruby-on-rails - 如何使用 ransack gem 根据模型的实例方法对表进行排序?
问题描述
我正在使用 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 实例方法进行排序。根据文档,似乎使用 ransacker 是要走的路。像这样的东西:
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
如果您愿意,可以在范围内编写自定义查询。谢谢 :)
推荐阅读
- linux - 为什么某些内核配置没有显示在 .config 中
- haskell - 使用 Barbies 或 Higgledy 将应用效果推向 HKD 领域
- html - 仅适用于 max-height CSS 的更好动画
- java - 使用 Spring Boot 和 Jackson ObjectMapper 时 OffsetDateTime 属性 JSON 序列化的区别
- amazon-route53 - 弹性 IP 与 AWS EC2 实例一起使用,但 Route 53 无法解析域名
- python - 无法在 django 项目中的模板文件夹上呈现 html 页面?
- go - 在 html 代码 Goland IDE 中禁用 sql 语法高亮
- csv - 如何在颤振中打开 CSV 文件?
- bash - 使用 curl 或 wget 下载并启动 sh.x 和 .run 文件
- java - Spring Boot unit test runs the whole program