2014-12-19 4 views
0

У меня есть следующие модели:Rails полиморфный has_many/belongs_to

User 
- type 

Account 
- user_id 

Aide 
- user_id 

Provider 
- user_id 

Пользователь может иметь тип [ «счет», «помощник», «провайдера»], и он может иметь много одного типа, но не должно иметь несколько типов, связанных с ним. Поэтому у пользователя типа «aide» есть много помощников, но у него не должно быть никаких учетных записей или поставщиков.

Есть ли установленный способ обращения с этим типом ассоциации в Rails? Это не является полиморфным в традиционном определении - это более того, что тип родителя определяет тип ребенка.

ответ

1
  • счет принадлежит Пользователю
  • Памятных принадлежит пользователю
  • Provider принадлежит Пользователю
  • Пользователь имеет много счетов
  • Пользователя имеет много помощников
  • Пользователь имеет много поставщиков

И тогда вы можете добавить метод проверки в класс модели пользователя следующим образом:

class User < ActiveRecord::Base # your User model 
    validate :pick_a_name 

    private 

    def pick_a_name 
    # check presence of associations that aren't of the users's type 

    associations = %w{accounts aides providers} # use a constant 

    associations.each do |a| 
     if (a != self.type.pluralize) && send(a).present? 
     # if such associations are present, add errors here 
     end 
    end 
    end 
end 

И в других классах:

class Account # your account model 
    validate :pick_a_name 

    private 

    def pick_a_name 
    if (user.type != 'account') 
     # add errors here 
    end 
    end 
end 
Смежные вопросы