2010-10-04 3 views
0

J'ai un peu de mal avec la gemme de «workflow», à savoir, les transitions ne fonctionnent pas. Ce que j'essaie de faire est très basique, j'ai un état 'lu/non lu' pour les messages entre utilisateurs, la transition est déclenchée quand l'utilisateur va à une page 'show' pour ce message spécifique. Cependant, je ne peux pas sembler obtenir la transition vers le travail, même dans la console:rails workflow gem méthode manquant erreur machine d'état

\\ message.rb 

class Message < ActiveRecord::Base 
    include Workflow 

    workflow do 
     state :unread do 
      event :view, :transitions_to => :read 
     end 
     state :read 
    end 
end 

dans la console, lorsque je tente de faire cette transition, j'utilise le code suivant et obtenir le résultat suivant:

>> message = Message.new 
=> #<Message id: nil, user_id: nil, message: nil, created_at: nil, u 
pdated_at: nil> 
>> message.current_state 
=> #<Workflow::State:0x7ed4febc @name=:unread, @events={:view=>#<Workflow: 
:Event:0x7ed4fd90 @action=nil, @name=:view, @transitions_to=:read, @meta={} 
>}, @meta={}> 
>> message.unread? 
=> true 
>> message.view! 
NoMethodError: undefined method `workflow_state=' for #<Message:0x7ecfd5a4> 
     from /home/Ryan/.bundle/ruby/1.8/gems/activerecord-2.3.8/lib/active_reco 
rd/attribute_methods.rb:259:in `method_missing' 
     from /home/Ryan/.bundle/ruby/1.8/gems/activerecord-2.3.8/lib/active_reco 
rd/base.rb:2656:in `send' 
     from /home/Ryan/.bundle/ruby/1.8/gems/activerecord-2.3.8/lib/active_reco 
rd/base.rb:2656:in `update_attribute' 
     from /home/Ryan/.bundle/ruby/1.8/gems/workflow-0.7.0/lib/workflow.rb:272 
:in `persist_workflow_state' 
     from /home/Ryan/.bundle/ruby/1.8/gems/workflow-0.7.0/lib/workflow.rb:211 
:in `transition' 
     from /home/Ryan/.bundle/ruby/1.8/gems/workflow-0.7.0/lib/workflow.rb:165 
:in `process_event!' 
     from /home/Ryan/.bundle/ruby/1.8/gems/workflow-0.7.0/lib/workflow.rb:124 
:in `view!' 
     from (irb):25 

Je ne trouve rien sur ce qui se passe ici, de googleing et même essayé de regarder dans: /home/Ryan/.bundle/ruby/1.8/gems/workflow-0.7.0/lib/workflow .rb mais je ne vois pas pourquoi cela ne fonctionne pas. C'est un problème très simple et j'ai brouillé mon cerveau pour comprendre ce qui ne va pas.

Merci pour votre aide

Répondre

1

Utilisez-vous workflow_state comme nom de colonne pour stocker l'état?

Sinon, mettez workflow_column :your_column_name dans le code du modèle.

Vous pouvez vérifier le réglage en tapant dans la console:

Message.workflow_column 
+0

grâce à cela. J'ai fini par utiliser acts_as_state_machine car évidemment mon besoin était très simple. Mais oui, c'était mon problème. – goddamnyouryan