ruby-on-rails - 如何在ActiveRecord中为ruby设置非null约束?

标签 ruby-on-rails activerecord

我有一个看起来像这样的迁移:

class CreatePosts < ActiveRecord::Migration
  def change
     create_table :posts do |t|
      t.string  :title 
      t.string  :content
      t.string  :author
      t.timestamps
    end
  end
end

如何将标题设置为NOT NULL?如果这是一个SQL查询,我会这样做:
CREATE TABLE "posts" 
    ("id" serial primary key, 
     "title" character varying(255) NOT NULL, 
     "content" character varying(255), 
     "author" character varying(255), 
     "created_at" timestamp NOT NULL, 
     "updated_at" timestamp NOT NULL) 

那么如何将查询转换为ActiveRecord?

最佳答案

要在数据库级别设置非null约束,请将null: false添加到ActiveRecord迁移中。例如,

class CreatePosts < ActiveRecord::Migration
  def change
     create_table :posts do |t|
      t.string  :title,   null: false
      t.string  :content, null: false
      t.string  :author,  null: false
      t.timestamps
    end
  end
end

您还应该(或者可以选择)在模型中添加一个状态验证器,该验证器在Rails级别上运行,并向最终用户提供信息丰富的错误消息:
class Post < ActiveRecord::Base
  validates :title, :content, :author, presence: true
end

有关更多信息,请参见Rails Guides on presence validation

关于ruby-on-rails - 如何在ActiveRecord中为ruby设置非null约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21462888/

相关文章:

ruby-on-rails - Bundler 找不到 gem "rack": 的兼容版本

html - 使用 nokogiri 和 ruby​​ on rails 更改 href 属性

ruby-on-rails - rails 4 : Why do fixtures make this test fail?

ruby-on-rails - 使用 has_many :through 时如何访问 Rails 连接模型属性

ruby-on-rails - Rails 模型验证优先吗?

ruby-on-rails - 运行索引迁移时,Rails 是否索引现有记录?

ruby-on-rails - 为引用自己表的外键创建 Rails 5 迁移

html - 如何在全屏 Jumbotron 上覆盖透明导航栏

sql - 获取 GROUP BY 后的行数

ruby-on-rails - 我应该联合索引 ActiveRecord 多态关联吗?