Ruby on rails 设置Rails中字段的默认值
因此,我有一个模型Ruby on rails 设置Rails中字段的默认值,ruby-on-rails,ruby-on-rails-4,activerecord,rails-activerecord,Ruby On Rails,Ruby On Rails 4,Activerecord,Rails Activerecord,因此,我有一个模型请求,它工作得非常好。我决定添加一个“状态”字段,带有默认值 def change create_table :requests do |t| t.references :owner, index: true t.references :pretender, index: true t.belongs_to :book, index: true t.string :status, va
请求
,它工作得非常好。我决定添加一个“状态”字段,带有默认值
def change
create_table :requests do |t|
t.references :owner, index: true
t.references :pretender, index: true
t.belongs_to :book, index: true
t.string :status, value: "pending", null: false
t.timestamps null: false
end
end
但现在我在这一行得到了一个不为NULL的约束:
...
user.requests.build owner_id: oid, pretender_id: pid, book_id: bid
...
这一切都很顺利。如果字段有默认值,我不需要在迁移文件中的
build
方法中定义它,否?,语法不是value
,而是default
:
t.string :status, null: false, default: 'pending',
在迁移文件中,语法不是
值
,而是默认值
:
t.string :status, null: false, default: 'pending',
由于MurifoX已经回答了,请使用
默认值
选项,而不是值
ActiveRecord有一个非常好的技巧,叫做。基本上,您将状态存储为整数:
t.integer :status, null: false, default: 0, index: true
然后在模型中添加列映射到的值:
class Request < ActiveRecord::Base
enum status: [:pending, :reserved, :foo, :bar]
end
基于状态对数据库执行查询也要快得多,因为您比较的是整数而不是字符串。正如MurifoX已经回答的那样,请使用
默认值选项而不是值
ActiveRecord有一个非常好的技巧,叫做。基本上,您将状态存储为整数:
t.integer :status, null: false, default: 0, index: true
然后在模型中添加列映射到的值:
class Request < ActiveRecord::Base
enum status: [:pending, :reserved, :foo, :bar]
end
基于状态对数据库执行查询也要快得多,因为您比较的是整数而不是字符串。Wow,这让人尴尬。。。谢谢哇,真让人尴尬。。。谢谢现在这是个坏蛋!我有审问法和砰砰法,但是第一种是做什么的?哦,我明白了。您使用的是类名,而不是实例!酷第一个请求是。where(status::reserved)
现在这太糟糕了!我有审问法和砰砰法,但是第一种是做什么的?哦,我明白了。您使用的是类名,而不是实例!酷数据第一个不请求。其中(状态::保留)