4
我有entries
表,其中可能包含大量文本的content
字段。在大多数情况下,我不需要访问该字段,因此每次从数据库加载大量未使用的数据(从id = 1的条目中选择*)似乎都会浪费大量资源。Ruby on Rails:预防默认选择列
我怎么能指定default_scope,除了content
之外的所有字段都会从数据库中加载?
我有entries
表,其中可能包含大量文本的content
字段。在大多数情况下,我不需要访问该字段,因此每次从数据库加载大量未使用的数据(从id = 1的条目中选择*)似乎都会浪费大量资源。Ruby on Rails:预防默认选择列
我怎么能指定default_scope,除了content
之外的所有字段都会从数据库中加载?
假设的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
在轨控制台,你应该看到类似这样的东西:
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