【发布时间】:2012-12-26 22:10:54
【问题描述】:
我的印象是 ActiveRecord 中的 custom_finder 选项意味着您可以免费获得 .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 不会导致关联扩展尊重它,那么它有什么意义 - 它可能只是对象上的一个方法...
【问题讨论】:
标签: ruby-on-rails activerecord finder-sql