Module: StateTransitions::ClassMethods
- Defined in:
- lib/state_transitions.rb
Instance Method Summary collapse
Instance Method Details
#define_first_state_transition_scope(state) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/state_transitions.rb', line 40 def define_first_state_transition_scope(state) sql = <<~SQL.squish #{current_table_name}.id = ( SELECT first_state_transition.id FROM state_transitions AS first_state_transition WHERE first_state_transition.resource_type = #{current_table_name}.resource_type AND first_state_transition.resource_id = #{current_table_name}.resource_id AND first_state_transition.state_to = ? ORDER BY first_state_transition.created_at LIMIT 1 ) SQL has_one :"first_#{state}_state_transition", -> { where(sql, state) }, as: :resource, class_name: "StateTransitions::StateTransition" end |
#track_state_transitions ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/state_transitions.rb', line 10 def track_state_transitions model_class = self has_one :current_state_transition, lambda { where( <<~SQL.squish #{current_table_name}.id = ( SELECT current_state_transition.id FROM state_transitions AS current_state_transition WHERE current_state_transition.resource_type = #{current_table_name}.resource_type AND current_state_transition.resource_id = #{current_table_name}.resource_id ORDER BY current_state_transition.created_at DESC LIMIT 1 ) SQL ) }, as: :resource, class_name: "StateTransitions::StateTransition" has_many :state_transitions, as: :resource, class_name: "StateTransitions::StateTransition", dependent: :destroy after_save :save_state_transition, if: :saved_change_to_state? end |