2

Как сделать (я думаю, пользовательскую) проверку, чтобы определить, что моя модель должна иметь одну из моих моделей STI?У Rails STI валидация должна быть одна

Мои модели так:

class Account < ActiveRecord::Base 
    has_many :users 
    has_one :admin, class_name: Admin, dependent: :destroy 
    has_many :members, class_name: Member, dependent: :destroy 

    accepts_nested_attributes_for :admin, reject_if: proc { |attributes| attributes['name'].blank? } 
    accepts_nested_attributes_for :members, reject_if: proc { |attributes| attributes['name'].blank? } 

    # Validate should have one of either a member or a user 
    # validates :users, ... 
end 

class User < ActiveRecord::Base 
end 

class Admin < User 
end 
class Member < User 
end 

Я хочу, чтобы проверить, когда создается учетная запись должна иметь один администратора или по крайней мере один элемент.

При необходимости я могу предоставить дополнительную информацию.

Спасибо!

+0

У учетной записи не будет пользователей до тех пор, пока * после этого не будет создан. Запись должна быть сохранена, прежде чем вы сможете подключить к ней пользователей. – tadman

+0

О, я забыл упомянуть, что это принимает nested_attributes_for. Изменит вопрос. – index

ответ

1

Возможно, вы захотите добавить сообщение об ошибке, если оба они отсутствуют, используя специальную проверку.

class Account < ActiveRecord::Base 
    validate :require_at_least_one_user 

    def require_at_least_one_user 
     errors.add(:user, "At least one user is required.") if self.admin.blank? && self.members.blank? 
    end 
end 
+0

Спасибо! Это прекрасно работает. – index

0

Я бы подтвердил наличие хотя бы одного пользователя, независимо от его типа.

Возможно, this может помочь.

Удачи.

Смежные вопросы