场景是这样的:
有一个虚父类,在数据库里面不会对应实际的表, 有很多子类会继承这个父类,在数据库中将会对应实际存在的表, 想要让所有子类默认以 form_date 时间倒序排列。
class Form < ActiveRecord::Base
self.abstract_class = true
default_scope order("#{table_name}.form_date DESC")
end
class SubForm < Form
end
大大可能会有疑问为什么要在form_date
前面加上#{table_name}.
是因为这些 Model 将来会 join 查询,
但 join 的表里面可能有的也包含form_date
字段,这样 Rails 会报错ambiguous column name: form_date
。
但如果采用我现在这样的代码,因为虚父类不对应表所以会有语法错误default_scope order(".form_date DESC")
。
class Form < ActiveRecord::Base
self.abstract_class = true
default_scope order("#{table_name}.form_date DESC") if !abstract_class # <---------------
end
class SubForm < Form
end
如果采用上面的代码呢,箭头所指这行貌似在子类中不执行,子类没有被按照form_date
倒序排列。
Ruby 基础不太好,请教大大们,谢谢!