首页 文章

未定义的方法raise_in_transactional_callbacks ='for ActiveRecord :: Base:Class(NoMethodError)

提问于
浏览
39

在写这个问题之前,我查看了这些答案,但无法找到解决方案:

Error when execute rails generate scaffold User name:string email:string

rake aborted! undefined method `migration_error=' for ActiveRecord::Base:Class

Error launching Rails server: undefined method 'configure'


当我尝试启动一个新的应用程序(对于Hartl's tutorial,第2章),在阶段脚手架启动时,我得到一个错误,如:

**undefined method `configure' for #<SampleApp2::Application:0x00000101a74610> (NoMethodError)**

但是由于上面的例子,我编辑了development.rb文件:

DemoApp::Application.configure do

(是的,我的应用程序名为demo_app,所以我改名了) .

之后,我尝试再次运行scaffold,但遇到了一个新错误:

**method_missing': undefined method raise_in_transactional_callbacks=' for ActiveRecord::Base:Class (NoMethodError)**

对类似情况的回应表明了一种迁移方法 - 它应该从文件development.rb中删除 . 同样,我试图在这个文件中找到raise_in_transactional_callbacks方法,但它不存在!另外,我会说在cmd中生成的完整代码非常大:

C:\Sites\demo_app>rails generate scaffold User name:string email:string
invoke  active_record
C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-4.0.2/lib/active_record/dynamic_matchers.rb:22:in `method_missing': undefined method `raise_in_transactional_callbacks=' for ActiveRecord::Base:Class (NoMethodError)
from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-4.0.2/lib/active_record/railtie.rb:166:in `block (3 levels) in <class:Railtie>'
from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-4.0.2/lib/active_record/railtie.rb:165:in `each'
from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-4.0.2/lib/active_record/railtie.rb:165:in `block (2 levels) in <class:Railtie>'
…
from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-4.0.2/lib/rails/commands.rb:48:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'

哪里...(省略号) - 特别切割类似的代码 . 就这样 . 我将不胜感激任何帮助!

2 回答

  • 20

    您的 config/application.rb 有以下行:

    config.active_record.raise_in_transactional_callbacks = true

    这不是您的Rails版本中的有效配置值 . 您需要删除它或将其注释以继续 .

    注意:此错误和继续执行的错误表示不完整Rails version change . 如果您处于教程的早期阶段,您可能会认真考虑从一开始就使用首选版本的Rails重新启动应用程序 . 在您更熟悉该技术之前,这将帮助您避免此类错误 .

  • 126

    将应用程序从Rails 5.0.1升级到Rails 5.1.0.beta1时,我遇到了同样的问题 .

    启动服务器( rails s )时,出现以下错误消息:

    /home/user01/.rvm/gems/ruby-2.4.0@global/gems/activerecord-5.1.0.beta1/lib/active_record/dynamic_matchers.rb:22:in `method_missing': undefined method `raise_in_transactional_callbacks=' for ActiveRecord::Base:Class (NoMethodError)
    

    同样的弊病,同样的治疗方法 .

    config/application.rb 中评论出以下一行,解决了这个问题......

    config.active_record.raise_in_transactional_callbacks = true
    

    经过一番调查,我发现这行是Rails 4.2.1中的默认行,在Rails 5.0.0中消失了,现在在Rails 5.1.0.beta1中引发错误......

相关问题