2012-06-16 8 views
8

Ich bin mit Rails 3.2.2, mit AASM Juwel, ich habe Document Modell auf diese Weise:AASM ist nicht mit meinen Schienen 3 und Rubin 1.8.7 (nicht definierte Methode `Namen‘ für nil: NilClass) arbeitet

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 

jetzt auf meiner Konsole:

➜ ✗ 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  

Wie Sie sehen, ich halte

bekommen

nicht definierte Methode `Name‘ für nil: NilClass

Ich benutze Ruby 1.8.7.

+0

Wie haben Sie die aasm-Spalte 'aasm_state' erstellt? (Wie sieht Ihr Datenbankschema aus?) Könnte es sein, dass Sie den Spaltentyp integer dafür verwendet haben? Stellen Sie sicher, dass ** string ** verwendet wird. :) – alto

Antwort

6

Ich hatte gerade das gleiche Problem. Dies liegt daran, dass die Statusvariable nil ist und nicht auf den Anfangszustand eingestellt ist. Um dies zu beheben, in Ihrem Fall, benötigen Sie einen Accessor auf dem Modell zu schreiben, so:

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

Need den genauen Namen der Spalte zu schreiben.

aasm column: :aasm_state do 
end