Rails прозрачные дочерние отношения - PullRequest
1 голос
/ 13 апреля 2011

У меня полиморфные отношения, и я бы хотел, чтобы ребенок (полиморф?) Был полностью прозрачным. Настройка является общей:

class ScheduledEvent < ActiveRecord::Base
    belongs_to :scheduleable, polymorphic:true
    #has column names like #starts_at, #ends_at
end
class AppointmentTypeOne < ActiveRecord::Base
    has_one :scheduled_event, :as=>:scheduleable, :dependent=>:destroy
end
class AppointmentTypeTwo < ActiveRecord::Base
    has_one :scheduled_event, :as=>:scheduleable, :dependent=>:destroy
end

Я бы хотел иметь возможность трактовать AppointmentTypeOne и AppointmentTypeTwo так, как будто ОНИ имели столбцы таблицы #starts_at и #ends_at.

С точки зрения метода очень легко добавить #starts_at, #starts_at= и т. Д. В мои AppointmentX классы и вернуться к ScheduledEvent. Но как настроить так, чтобы отношения были прозрачными и для ActiveRelation? Позвольте мне сделать что-то вроде:

AppointmentTypeOne.where('starts_at IS NOT NULL')

(без необходимости join или include :scheduled_event)

1 Ответ

0 голосов
/ 13 апреля 2011

Похоже, вы хотите использовать наследование одной таблицы, а не ассоциацию has_one. Это позволит вам создавать подклассы ScheduledEvent для каждого типа встреч:

class ScheduledEvent < ActiveRecord::Base

end

class AppointmentTypeOne < ScheduledEvent

end

class AppointmentTypeTwo < ScheduledEvent

end

По сути, вы добавляете столбец типа в таблицу schedule_events, а rails позаботится обо всем остальном.

Это сообщение на форуме охватывает все детали: http://railsforum.com/viewtopic.php?id=3815

...