aasm after callback with argument

aasm, acts-as-state-machine, ruby, ruby-on-rails, ruby-on-rails-4

Solution

Look aasm docs in section callbacks.

...
  aasm column: :state do
    state :pending_approval, initial: true
    state :active
    state :pending_removal

    after_all_transition :log_all_events

    event :accept_approval, after: :log_approval do
      transitions from: :pending_approval, to: :active
    end
  end
  ...
  del log_all_events(user)
    logger.debug "aasm #{aasm.current_event} from #{user}"
  end

  def log_approval(user)
    logger.debug "aasm log_aproove from #{user}"
  end

You can call events with needed params:

  @post.accept_approval! current_user

Problem

I'm using the aasm (formerly `acts_as_state_machine`) gem in my rails 4 application. I have something like this on my `Post` model ``` ... aasm column: :state do state :pending_approval, initial: true state :active state :pending_removal event :accept_approval, :after => Proc.new { |user| binding.pry } do transitions from: :pending_approval, to: :active end end ... ``` When I call `@post.accept_approval!(:active, current_user)` and the after callback gets triggered, in my console I can inspect what `user` is (that was passed into the Proc) and it's `nil`! What's going on here? What is the correct way to call this transition?

Original source