Можно ли указать столбцы, которые не должны быть загружены в ActiveRecord? - PullRequest
1 голос
/ 11 января 2010

У меня есть таблица базы данных, которая используется совместно с другим приложением. В нем много столбцов, которые я никогда не буду использовать в своем приложении. Можно ли указать столбцы, которые будут игнорироваться в модели ActiveRecord?

Обычно это не слишком большая сделка, но в этом случае у меня есть таблица с двумя BLOB-объектами, которые мне никогда не понадобятся объединить с другой таблицей с 37 столбцами (из которых мне нужен один).

Полагаю, я мог бы согласиться всегда использовать атрибут: select в моих находках и ассоциациях, но я бы хотел настроить его один раз.

Ответы [ 3 ]

3 голосов
/ 11 января 2010

Я думаю, вы сможете указать default_scope для своей модели, передав :select, который задает интересующие вас столбцы.

class MyModel < ActiveRecord::Base
  default_scope :select => 'column1, column2, column3'
end
1 голос
/ 11 января 2010

Вы можете взломать это вместе с named_scope

  named_scope :without, lambda {|arg| {:select =>Post.column_names.reject {|c| [arg].flatten.include? c.to_sym}.join(",")} }

>> Post.column_names
=> ["id", "title", "body", "test1", "test2", "created_at", "updated_at"]
>> Post.without(:test1)
  Post Load (0.4ms)   SELECT id,title,body,test2,created_at,updated_at FROM "posts" 
=> [#<Post id: 1, title: "test post", body: "something something", test2: "test2 thing", created_at: "2010-01-11 17:11:41", updated_at: "2010-01-11 17:11:41">]
>> Post.without([:test1,:body])
  Post Load (0.3ms)   SELECT id,title,test2,created_at,updated_at FROM "posts" 
=> [#<Post id: 1, title: "test post", test2: "test2 thing", created_at: "2010-01-11 17:11:41", updated_at: "2010-01-11 17:11:41">]
0 голосов
/ 13 января 2010

Вы можете использовать представление в базе данных, а не смотреть на исходные таблицы напрямую. Преимущество этого заключается в том, что вам не нужно менять код, если они добавляют еще один столбец BLOB, поскольку он не будет отображаться в представлении (если вы не измените представление) и поэтому не будет выбран.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...