Как установить ненулевое ограничение в activerecord для ruby?

У меня есть миграция, которая выглядит так:

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?

2 ответа

Чтобы установить ненулевое ограничение на уровне базы данных, добавьте 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 при проверке присутствия для более подробной информации.


Измените строку t.string :title на

t.string :title, null: false

licensed under cc by-sa 3.0 with attribution.