在最后 has_many 个关联中搜索具有特定值的实例
Ransack searching for instances with specific value in last of has_many associations
我在 rails 项目中使用 ransack gem 进行排序和过滤。
有一个 Child
模型,它有很多课程订阅。 Course
有 period_id
。 Child
有一个方法 last_subscription_period
。
如果能回答以下任何问题,那就太好了:
- 如何过滤children这种方法的搜索结果?
- 选择 children 的 SQL 查询是什么,最后订阅具有特定 period_id?
型号:
Child has_many subscriptions
Subscription belongs_to child
Subscription belongs_to course
列
children: id
subscriptions: child_id, course_id, created_at
courses: period_id
SELECT l.child_id, co.period_id
FROM (
SELECT s.child_id, s.course_id
FROM (
SELECT child_id, MAX(created_at) AS latest_subscription
FROM subscriptions
GROUP BY child_id
) AS l
JOIN subscription AS s
ON s.child_id = l.child_id
AND s.created_at = l.latest_subscription
) AS l
JOIN courses AS co
ON co.id = l.course_id
我在 rails 项目中使用 ransack gem 进行排序和过滤。
有一个 Child
模型,它有很多课程订阅。 Course
有 period_id
。 Child
有一个方法 last_subscription_period
。
如果能回答以下任何问题,那就太好了:
- 如何过滤children这种方法的搜索结果?
- 选择 children 的 SQL 查询是什么,最后订阅具有特定 period_id?
型号:
Child has_many subscriptions
Subscription belongs_to child
Subscription belongs_to course
列
children: id
subscriptions: child_id, course_id, created_at
courses: period_id
SELECT l.child_id, co.period_id
FROM (
SELECT s.child_id, s.course_id
FROM (
SELECT child_id, MAX(created_at) AS latest_subscription
FROM subscriptions
GROUP BY child_id
) AS l
JOIN subscription AS s
ON s.child_id = l.child_id
AND s.created_at = l.latest_subscription
) AS l
JOIN courses AS co
ON co.id = l.course_id