I have entries
表与一个content
可能包含大量文本的字段。在大多数情况下,我不需要访问该字段,因此每次从数据库加载大量未使用的数据(从 id = 1 的条目中选择*)似乎是对资源的巨大浪费。
我如何指定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
在 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)