Я использую гем validates_existence_of. Это работает хорошо, за исключением случаев, когда я хочу, чтобы мой внешний ключ был равен нулю.
Вот мои модели для пользователя и проекта. Проект принадлежит пользователю и участнику (участник также является пользователем), но участник может быть нулевым.
Вот моя пользовательская модель:
class User < ActiveRecord::Base
attr_accessible :first_name, :last_name
has_many :projects, :dependent => :destroy
has_many :user_trimester_statuses, :dependent => :destroy
end
И вот моя модель проекта:
class Project < ActiveRecord::Base
attr_accessible :added, :amount, :contributor_id, :label, :ref, :trimester_id, :user_id
belongs_to :user
belongs_to :contributor, :class_name => 'User'
belongs_to :trimester
validates :user, :existence => { :both => false }
validates :trimester, :existence => { :both => false }
validates :contributor, :existence => { :allow_nil => true, :both => false }
end
Когда я пытаюсь добавить новый проект, у меня возникает ошибка, если поле user_id или trimester_id пустое или недопустимое. Но для поля contributor_id ошибка не возникает, если поле недействительно. Он проходит в любом случае (действительный, недействительный или нулевой).
Что я делаю неправильно? Я использую рубин 2.0.0p0 и рельсы 3.2.13.