Предположим, о, например, ваша объектная модель выглядит следующим образом:
class Business < ActiveRecord::Base
has_many :hours, :as => :hourable
end
class Staff < ActiveRecord::Base
has_many :hours, :as => :hourable
end
class Hour < ActiveRecord::Base
belongs_to :hourable, :polymorphic => true
end
class BusinessHour < Hour
# etc
end
Тогда у вас уже есть ссылка на нужный вам класс в 'hourable', и вы можете добавить искатель следующим образом:
class Hour < ActiveRecord::Base
belongs_to :hourable, :polymorphic => true
def self.get_hours_by_hourable_id(id)
hourable.class.find(id).hours
end
end
Просто предложение, но вы можете рассмотреть вопрос о проверке подклассов, чтобы гарантировать, что: hourable - это соответствующий тип, например:
class BusinessHour < Hour
validates :hourable_must_be_business
def hourable_must_be_business
unless hourable_type == 'Business'
self.errors.add_to_base("Hourable for BusinessHour must be Business")
end
end
end