2012-06-16 10 views
8

sto usando Rails 3.2.2, con la gemma SAMA, ho Document modello in questo modo:SAMA non funziona con i miei binari 3 e Ruby 1.8.7 (undefined metodo `Name' per nil: NilClass)

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 

ora in poi mia 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  

Come si può vedere Continuo a ricevere

indefinito metodo `nome' per nil: NilClass

0.123.

Sto usando Ruby 1.8.7.

+0

Come hai creato la colonna di aasm 'aasm_state'? (come appare lo schema del tuo database?) Potresti aver usato il numero intero di colonne per questo? Assicurati di utilizzare ** stringa **. :) – alto

risposta

6

Ho appena avuto lo stesso problema. Ciò si verifica perché per impostazione predefinita la variabile di stato è nil anziché essere impostata sullo stato iniziale. Per risolvere questo problema, nel tuo caso, devi aggiungere una accessor sul modello, in questo modo:

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

È necessario scrivere il nome esatto della colonna.

aasm column: :aasm_state do 
end 
Problemi correlati