2012-06-16 12 views
8

estoy usando Rails 3.2.2, con la gema AASM, tengo Document modelo de esta manera:AASM no está trabajando con mis carriles 3 y Ruby 1.8.7 (indefinido método `nombre' para nada: 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 

ahora en mi consola:

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

como se puede ver me siguen dando

indefinido método `nombre' para nada: NilClass

Estoy usando Ruby 1.8.7.

+0

¿Cómo se creó la columna de aasm 'aasm_state'? (¿Cómo se ve el esquema de la base de datos?) ¿Podría ser que utilizó el entero de tipo columna para él? Asegúrese de usar ** cadena **. :) – alto

Respuesta

6

Acabo de tener el mismo problema. Surge porque, de manera predeterminada, la variable de estado es nil en lugar de establecerse en el estado inicial. Para solucionar este problema, en su caso, es necesario agregar un descriptor de acceso en el modelo, así:

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

necesidad de escribir el nombre exacto de la columna.

aasm column: :aasm_state do 
end 
Cuestiones relacionadas