Вопрос

Я хочу провести проверку на уровне модели в следующей таблице:

create_table :audios do |t|
  t.integer :library_id, :null => false
  t.string :file, :null => false, :limit => 2048
  t.string :name, :limit => 512
  t.timestamps
end

Означает ли это, что моя модель, которая (пока) выглядит так:

class Audio < ActiveRecord::Base
  belongs_to :library
end

Имеет

class Audio < ActiveRecord::Base
  validates_presence_of :library
  ...

или

class Audio < ActiveRecord::Base
  validates_presence_of :library_id
  ...

?

Это было полезно?

Решение

Чтобы проверить наличие ассоциации, используйте ее имя, без _id добавлено:

validates_presence_of :library

Это подтвердит две вещи:

  1. library_id настоящее
  2. а Library с данным id существует

С использованием validates_presence_of :library_id даст вам только первую проверку из двух.

Кроме того, версия без _id также будет правильно проверять, являются ли обе записи новыми (и, следовательно, library_id все еще не настроен).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top