我有一个有很多孩子的父母。我有兴趣搜索最后一个(最高ID)孩子记录上的一列。
我在Ransack中看到了一个“_last”关联语法的引用,这正是我想要做的。但是它不起作用,我在文档中找不到任何引用。它看起来像这样:
Parent.ransack(children_last_name_eq: "search term").result
这应该搜索父项的最后一个子项的name列,并返回匹配的父项记录。
所以我创建了一个作用域has_one关联,如下所示:
class Parent
has_many :children
has_one :last_child, -> { order(id: :desc) }, class_name: "Child"
end
现在parent.last_child正确地返回了最后一个子对象。然后我使用以下命令创建了一个Ransack查询:
Parent.ransack(last_child_name_eq: "search term").result
这会运行,但是当我查看它生成的SQL时,它会将范围降低到最后一个子记录,并搜索所有子记录。我假设ransack构建SQL时,它解释has_one的方式与活动记录不同。
我实际的ransack查询比这个复杂得多,所以我不能实现任何会破坏其他搜索参数的东西。Ransack 2.3.2 on Rails 5.2 using MySQL 5.7
1条答案
按热度按时间rslzwgfq1#
我使用模型中的默认作用域和自定义ransack行实现了这一点: