AASM不使用我的rails 3和ruby 1.8.7(未定义的方法`name'代表nil:NilClass)

时间:2022-03-12 13:08:34

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

我正在使用Rails 3.2.2,使用aasm gem,我有这样的Document模型:

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

nil的未定义方法`name':NilClass

I'm using Ruby 1.8.7.

我正在使用Ruby 1.8.7。

2 个解决方案

#1


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:

我刚才有同样的问题。之所以出现这种情况,是因为默认状态变量为nil而不是设置为初始状态。要解决这个问题,在您的情况下,您需要在模型上添加一个访问器,如下所示:

def aasm_state
  self[:aasm_state] || "unread"
end

#2


0  

Need to write the exact name of column.

需要写出列的确切名称。

aasm column: :aasm_state do 
end

#1


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:

我刚才有同样的问题。之所以出现这种情况,是因为默认状态变量为nil而不是设置为初始状态。要解决这个问题,在您的情况下,您需要在模型上添加一个访问器,如下所示:

def aasm_state
  self[:aasm_state] || "unread"
end

#2


0  

Need to write the exact name of column.

需要写出列的确切名称。

aasm column: :aasm_state do 
end