2014-10-24 1 views
3

Так у меня есть эта модель:Rails: BELONGS_TO Полиморфные ассоциации + условия

class Model < ActiveRecord::Base 
    attr_accessible :to_id, :to_type 

    belongs_to :to, polymorphic: true 

end 

мне было интересно, если я мог бы добавить еще отношения, когда belongs_to находится на определенном типе:

class Model < ActiveRecord::Base 
    attr_accessible :to_id, :to_type 

    belongs_to :to, polymorphic: true 
    belongs_to :to_user, :foreign_key => :to_id, :conditions => ['to_type = ?', 'User'] # doesn't work 
    # OR MAYBE 
    belongs_to :to_user, :foreign_key => :to_id, :foreign_class => 'User' # It doesn't check on Model's to_type... 
end 

Так что my_model.to_user вернет user, если существует, и nil, если он не установлен или отличается классом.

Использование Rails 3.2

Спасибо!

ответ

2

Вы можете использовать, где состояние внутри, что как

belongs_to :to_user,-> {where(:to_type=> 'User')}, :foreign_key => :to_id 

Формы более взглянуть на этой association callbacks

0

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

def to_user 
    #user-exclusive association retrieval 
    type = self.to_type == 'User' 
    User.find(self.to_id) if type 
end