作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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
关于ruby-on-rails - Ruby on Rails : prevent from selecting a column by default,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6370043/
我是一名优秀的程序员,十分优秀!