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