rails3 default_scope,以及迁移中的默认列值
class CreateCrews false t.timestamps end end def self.down drop_table :crews end end class Crew :crew_users belongs_to :user default_scope where(:approved => true) end
当我进入控制台并创建新记录时,“已批准”属性设置为true,为什么?
如何将其自动设置为默认值(false),如我的迁移文件中所示?
wojciech@vostro:~/work/ze$ rails console Loading development environment (Rails 3.0.0) ruby-1.9.2-p0 > c = Crew.new
=> #
default_scope
的文档说明提供的范围适用于查询和新对象。 模型级别提供的缺省值始终优先于模式级别提供的缺省值,因为它们是在将数据发送到数据库之前在应用程序内部创建的。
您可以使用unscoped
暂时跳过所有作用域(包括default_scope
)。 这应该允许较低级别的数据库默认机制生效* 。
Crew.unscoped.new
* ActiveRecord模糊了数据库(模式)中定义的默认值与应用程序(模型)中的默认值之间的差异。 在初始化期间,它解析数据库模式并记录其中指定的任何默认值。 稍后,在创建对象时,它会分配这些模式指定的默认值,而不会触及数据库。 例如,您将在Crew.unscoped.new
的结果中看到approved: false
(而不是approved: nil
),即使数据从未发送到数据库以使其填写其默认值(ActiveRecord抢先填写)默认值基于它从架构中提取的信息)。
一个小技巧是使用
default_scope -> { where('crews.approved = 1') }
- ENV变量中的Capistrano和API键?
- 可以在Rails控制器中呈现和引发exception吗?
- 使用http基本身份validation和restful_authentication插件注销
- Rails:simple_form中集合所需的属性
- Rails基于两个字段查找或创建
- Rails link_to或button_to发布带参数的请求
- default_scope在某些情况下会中断(更新|删除|销毁)_all
- Gem Rmagick安装错误:extconf.rb:171:在“’:没有这样的文件或目录 – convert -version(Errno :: ENOE NT)
- Rails named_scopeinheritance?