我的印象是,在ActiveRecord的该custom_finder
选项意味着你有关联的扩展名如.where
和.order
免费,例如:您可以使用自定义finder_sql在对象上使用关联扩展吗?
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
不会导致联想扩展尊重它,然后什么在它一点 - 它可能只是在对象上的方法...