Ограничить столбцы, представленные в ActiveRecord - PullRequest
7 голосов
/ 06 января 2012

Как изменить ActiveRecord, чтобы он всегда имел ограниченный набор столбцов.Я не хочу, чтобы все столбцы в резервной таблице были представлены в модели.Это излишне увеличивает объем памяти ActiveRecord, а также время, затрачиваемое на запрос записи.

Существуют такие атрибуты, как select ( ar.rubyonrails.org / classes / ActiveRecord / Base ), которые могутиспользоваться для выбора только нескольких столбцов.Но есть ли способ заставить ActiveRecord никогда не запрашивать эти столбцы, несмотря на то, что пользователь выполняет только поиск без указания :select все время.

Ответы [ 2 ]

10 голосов
/ 06 января 2012

использование default_scope

, например

class MyModel < ActiveRecord::Base
  default_scope select("column1, column2, column3")

  ...
end
2 голосов
/ 06 января 2012

Не можете ли вы сделать с областью:

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">] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...