AASM is not working with my rails 3 and ruby 1.8.7 ( undefined method `name' for nil:NilClass )
Asked Answered
A

2

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.

Armelda answered 16/6, 2012 at 20:7 Comment(1)
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. :)Eleanor
J
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
Jellyfish answered 12/4, 2013 at 4:54 Comment(0)
A
0

Need to write the exact name of column.

aasm column: :aasm_state do 
end
Alameda answered 12/10, 2015 at 12:37 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.