【问题标题】:AASM Gem broken by Rails 2.3.2?AASM 宝石被 Rails 2.3.2 破坏?
【发布时间】:2009-04-09 15:26:23
【问题描述】:

有没有人在使用带有 Rails 2.3.2 的 AASM 状态机 Gem 时遇到任何问题?它对我来说很好,但现在给了NoMethodError

NoMethodError (undefined method `state' for #<Comment:0x25cb8ac>):
  /usr/local/lib/ruby/gems/1.8/gems/rubyist-aasm-2.0.5/lib/persistence/active_record_persistence.rb:231:in `send'
  /usr/local/lib/ruby/gems/1.8/gems/rubyist-aasm-2.0.5/lib/persistence/active_record_persistence.rb:231:in `aasm_read_state'
  /usr/local/lib/ruby/gems/1.8/gems/rubyist-aasm-2.0.5/lib/persistence/active_record_persistence.rb:135:in `aasm_current_state'
  /usr/local/lib/ruby/gems/1.8/gems/rubyist-aasm-2.0.5/lib/persistence/active_record_persistence.rb:156:in `aasm_ensure_initial_state'
 app/controllers/comments_controller.rb:12:in `create'

这是我的模型中使用 AASM 的相关代码:

class Comment < ActiveRecord::Base
  include AASM
  belongs_to :post          
  after_create :spam_check

  aasm_column :state
  aasm_initial_state :submitted
  aasm_state :submitted
  aasm_state :approved
  aasm_state :rejected

  aasm_event :ham do
    transitions :to => :approved, :from => [:submitted, :rejected]
  end

  aasm_event :spam do
    transitions :to => :rejected, :from => [:submitted, :approved]
  end     

  private          
  def spam_check
    # Invoke Askismet to see if the comment is spam...
  end
end

请注意,我的comments 表中有state 列。

  • 任何想法为什么它不再起作用?

【问题讨论】:

    标签: ruby-on-rails ruby rubygems aasm


    【解决方案1】:

    嗯,您需要在 cmets 表中添加一个名为“state”的字段。您使用aasm_column :state 定义了它。这不是 Rails 2.3.2 的错误! :D

    【讨论】:

    • 我的 cmets 表中有该列。
    • 原来我根本没有那个专栏!它是在我的迁移和 schema.rb 中定义的,但我也在运行一个 SQL 文件来预填充数据库,并且它稍微不同步并且正在删除“状态”列。
    【解决方案2】:

    aasm home page 看来,在撰写本文时,即将有更新......

    Ruby on Rails group 上有一些讨论 - 我不知道这是否有帮助。

    执行

    gem list .*aasm --remote
    

    抛出了一堆参考资料:

    aasmith-yodlee (0.0.1.20090301132701)
    bloom-aasm (2.0.3)
    bloom-bloom-aasm (2.0.3)
    caleb-aasm (2.0.2)
    dunedain289-aasm (2.1.3)
    dvdplm-aasm (2.0.6)
    eric-aasm (2.0.4)
    factorylabs-aasm (2.0.5.2)
    gvaughn-aasm (2.0.4)
    lostboy-aasm (2.0.5.1)
    mikowitz-aasm (2.0.6)
    netguru-aasm (2.0.6)
    notch8-aasm (2.0.5)
    rubyist-aasm (2.0.5)
    runcoderun-aasm (2.0.5.1)
    snoozer05-aasm (2.0.2)
    spicycode-aasm (2.0.0)
    

    它怀疑“dvdplm-”、“factorylabs-”和“runco​​derun-”的部分或全部可能是 git fork。您可能会发现一个或多个解决了您的问题。

    【讨论】:

    • 谢谢迈克。我尝试将 ruby​​ist-aasm 换成 factorylabs-aasm,但它仍然不起作用。我将尝试使用简单的状态机模型创建一个全新的 Rails 项目,看看它是否适用。
    猜你喜欢
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 2016-01-13
    • 2011-06-08
    相关资源
    最近更新 更多