You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
If ParentClass in a STI scheme has a lifecycle, ChildClass cannot define functional lifecycle
creators.
If ChildClass attempts to define a lifecycle, it simply
end up extending the lifecycle of ParentClass.
This is mostly a problem if the ChildClass tries to define
any lifecycle create actions. If ChildClass contains code like
this:
lifecycle do
state :child_specific_state
create :child_specific_creator, become: child_specific_state
end
Then ParentClass gets a new creator called child_specific_creator.
When the lifecycle create action is executed, on ChildClass the ChildClass::Lifecycle method returns the same value as ParentClass::Lifecycle.
Unfortunately, the lifecycle object itself contains a pointer to the
model.
If you have a look at the source code for the Hobo::Models::Lifecycle::Creator#run!
method, you will see it call lifecycle.model.new for any creator action and thus
only creates instances of ParentClass even if the creator called was child_specific_creator.
The text was updated successfully, but these errors were encountered:
stevemadere
changed the title
STI subclasses with lifecycles do not work
STI subclasses with lifecycle creators do not work
Sep 17, 2016
I am having to work around this by just not using a lifecycle creator when creating an instance of ChildClass. I am using ordinary rails create and the auto-generated hobo controller new/create actions handle my UI.
However, if my use case had involved multiple distinct creators in ChildClass, it would be much uglier.
It is even worse than I thought.
Auto routes for ChildClass are completely FUBAR by the lifecycle
in ParentClass.
Even with a directive like this
auto_actions except: :lifecycle
in the definition of ChildClassesController, all of the
ParentClassController lifecycle actions get a route under /child_classes/
and NONE of the standard CRUD actions get a route:
If ParentClass in a STI scheme has a lifecycle,
ChildClass cannot define functional lifecycle
creators.
If ChildClass attempts to define a lifecycle, it simply
end up extending the lifecycle of ParentClass.
This is mostly a problem if the ChildClass tries to define
any lifecycle create actions. If ChildClass contains code like
this:
Then ParentClass gets a new creator called child_specific_creator.
When the lifecycle create action is executed, on ChildClass the
ChildClass::Lifecycle method returns the same value as ParentClass::Lifecycle.
Unfortunately, the lifecycle object itself contains a pointer to the
model.
If you have a look at the source code for the Hobo::Models::Lifecycle::Creator#run!
method, you will see it call lifecycle.model.new for any creator action and thus
only creates instances of ParentClass even if the creator called was child_specific_creator.
The text was updated successfully, but these errors were encountered: