我的印象是custom_finder
ActiveRecord 中的选项意味着您可以免费获得关联扩展.where
,.order
例如:
class Dog < ActiveRecord::Base
has_many :fleas, class_name: 'Flea',
finder_sql: "select fleas.* from fleas where pet_type = 'dog'"
end
当然这不是一个很好的例子,因为“finder_sql”是如此微不足道,但它说明了这一点。
生成的 SQL
我期望以下
@dog = Dog.find(5)
@dog.fleas.where('num_legs > 2')
生成
"select fleas.* from fleas where pet_type = 'dog' AND num_legs > 2
即自定义finder_sql + where 子句
然而它实际产生的是
"SELECT "base_posts".* FROM "fleas" WHERE "fleas"."dog_id" = 5 AND (num_legs > 2)
即它完全无视习惯finder_sql
并试图将跳蚤加入当前的狗。
如果自定义finder_sql
不会导致关联扩展尊重它,那么它有什么意义 - 它可能只是对象上的一个方法......