8

I'm using Rails 3.2.2, with aasm gem, I have Document model this way:

class Document < ActiveRecord::Base
  include AASM

  aasm do  
    state :unread, :initial => true
    state :read
    state :closed

    event :view do
      transitions :to => :read, :from => [:unread]
    end

    event :close do
      transitions :to => :closed, :from => [:read, :unread]
    end
  end

now on my console:

➜  ✗ bundle exec rails c
Loading development environment (Rails 3.2.2)
irb(main):006:0> Document.create!(:title => 'test')
   (0.2ms)  BEGIN
  SQL (0.3ms)  INSERT INTO `documents` (`aasm_state`, `checklist_id`, `created_at`, `description`, `dir`, `planned_date`, `procedure_id`, `section`, `subsection`, `title`, `updated_at`) VALUES (0, NULL, '2012-06-16 20:03:18', NULL, NULL, NULL, NULL, NULL, NULL, 'test', '2012-06-16 20:03:18')
   (0.4ms)  COMMIT
=> #<Document id: 28, title: "test", description: nil, dir: nil, section: nil, subsection: nil, planned_date: nil, procedure_id: nil, checklist_id: nil, created_at: "2012-06-16 20:03:18", updated_at: "2012-06-16 20:03:18", aasm_state: 0>
irb(main):007:0> doc = Document.last
  Document Load (0.3ms)  SELECT `documents`.* FROM `documents` ORDER BY `documents`.`id` DESC LIMIT 1
=> #<Document id: 28, title: "test", description: nil, dir: nil, section: nil, subsection: nil, planned_date: nil, procedure_id: nil, checklist_id: nil, created_at: "2012-06-16 20:03:18", updated_at: "2012-06-16 20:03:18", aasm_state: 0>
irb(main):008:0> doc.view!
NoMethodError: undefined method `name' for nil:NilClass
    from /Library/Ruby/Gems/1.8/gems/aasm-3.0.6/lib/aasm/supporting_classes/state.rb:15:in `=='
    from /Library/Ruby/Gems/1.8/gems/aasm-3.0.6/lib/aasm/aasm.rb:143:in `aasm_state_object_for_state'
    from (irb):8:in `find'
    from /Library/Ruby/Gems/1.8/gems/aasm-3.0.6/lib/aasm/aasm.rb:143:in `each'
    from /Library/Ruby/Gems/1.8/gems/aasm-3.0.6/lib/aasm/aasm.rb:143:in `find'
    from /Library/Ruby/Gems/1.8/gems/aasm-3.0.6/lib/aasm/aasm.rb:143:in `aasm_state_object_for_state'
    from /Library/Ruby/Gems/1.8/gems/aasm-3.0.6/lib/aasm/aasm.rb:158:in `aasm_fire_event'
    from /Library/Ruby/Gems/1.8/gems/aasm-3.0.6/lib/aasm/base.rb:48:in `view!'
    from (irb):8    

As you can see I keep getting

undefined method `name' for nil:NilClass

I'm using Ruby 1.8.7.

simonmenke
  • 2,749
  • 16
  • 27
Eqbal
  • 1,519
  • 2
  • 14
  • 23
  • How did you create the aasm column 'aasm_state'? (how does your database schema look like?) Could it be that you used the column type integer for it? Make sure to use **string**. :) – alto Oct 19 '12 at 10:24

2 Answers2

6

I just had the same issue. It arises because by default the state variable is nil instead of being set to the initial state. To fix this, in your case, you need to add an accessor on the model, like so:

def aasm_state
  self[:aasm_state] || "unread"
end
Gunchars
  • 5,608
  • 3
  • 24
  • 26
0

Need to write the exact name of column.

aasm column: :aasm_state do 
end
Alina
  • 1