Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 设置Rails中字段的默认值_Ruby On Rails_Ruby On Rails 4_Activerecord_Rails Activerecord - Fatal编程技术网

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)
现在这太糟糕了!我有审问法和砰砰法,但是第一种是做什么的?哦,我明白了。您使用的是类名,而不是实例!酷数据第一个不请求。其中(状态::保留)