Ruby on Rails: запретить выбор столбца по умолчанию - PullRequest
5 голосов
/ 16 июня 2011

У меня есть entries таблица с полем content, которое может содержать много текста.В большинстве случаев мне не нужно получать доступ к этому полю, поэтому кажется, что каждый раз загружать огромное количество неиспользуемых данных из базы данных - большая трата ресурсов (выберите * из записей, где id = 1).

Как я могу указать default_scope, чтобы все поля, кроме content, были загружены из базы данных?

1 Ответ

13 голосов
/ 16 июня 2011

Предполагается, что Rails 3 и схема выглядит следующим образом:

create_table "entries", :force => true do |t|
  t.string   "title"
  t.text     "content"
  t.datetime "created_at"
  t.datetime "updated_at"
end

Вы можете использовать метод select для ограничения полей, которые возвращаются следующим образом:

class Entry < ActiveRecord::Base
  default_scope select([:id, :title])
end

В консоли rails вы должны увидеть что-то вроде этого:

puts Entry.where(:id => 1).to_sql  # => SELECT id, title FROM "entries"  WHERE "entries"."id" = 1

Если вы хотите выбрать все поля, вы можете использовать метод unscoped, например:

puts Entry.unscoped.where(:id => 1).to_sql  # => SELECT * FROM "entries"  WHERE "entries"."id" = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...