如何更改ActiveRecord以使其始终具有受限制的列集。我不希望后备表中的所有列都出现在模型中。这不必要地增加了ActiveRecord的内存占用以及查询记录所花费的时间。
有一些属性,如select(ar.rubyonrails.org/classes/ActiveRecord/Base),可用于仅选择几列。但有没有办法我们可以强制ActiveRecord永远不会查询这些列,尽管用户只是在没有指定:select
的情况下执行查找。
答案 0 :(得分:10)
e.g。
class MyModel < ActiveRecord::Base
default_scope select("column1, column2, column3")
...
end
答案 1 :(得分:2)
你不能用范围:
IGNORED = %w( id created_at updated_at )
scope :filtered, lambda { select( cols ) }
def self.cols
attribute_names = []
attributes = self.columns.reject { |c| IGNORED.include?( c.name ) }
attributes.each { |attr| attribute_names << attr.name }
attribute_names
end
Model.filtered
[#<Model name: "Test 2", reg_num: "KA 02", description: "aldsfjadflkj">]