ActiveRecord::Base:Class没有'reaise_in_transactional_callbacks='方法(NoMethodError)

76

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

当执行rails generate scaffold User name:string email:string时出现错误。

rake中止!ActiveRecord::Base:Class没有定义'migration_error='方法。

启动Rails服务器时出现错误:未定义'configure'方法。


当我尝试启动一个新的应用程序(Hartl's tutorial,第2章),在阶段scaffold开始时,我收到了以下错误信息:
**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>'

我希望你能帮忙翻译以下内容:在哪里...(省略号) - 特别剪裁类似的代码。 就这些。非常感谢您的帮助!

3个回答

211

你的config/application.rb文件中有以下这行配置:

config.active_record.raise_in_transactional_callbacks = true

在你所使用的Rails版本中,这不是一个有效的配置值。你需要删除它或将其注释掉才能继续。


注意:这个错误和之前的错误表明你正在进行不完整的Rails版本更改。如果你还处于教程的早期阶段,你可能应该考虑从头开始使用你喜欢的Rails版本重新启动你的应用程序。这将帮助你避免这种类型的错误,直到你更熟悉这项技术为止。


14
该行代码适用于 Rails 版本大于等于 4.2。 - Chambeur
4
已经创建了一个版本为4.2的应用程序,但需要回滚到版本为4.1以便获取宝石库的访问权限。+1 - Jerome
这个可行:我对“注释”感到困惑……当迁移到另一个版本的Rails时,我不确定还需要做什么。你能指点我吗? - ed_is_my_name
5
升级 Rails 后记得运行 rails app:update 呦 ;) - Tashows

29

我在将一个应用程序从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中现在会引发一个错误...


1
如果您在config/application.rb中没有看到config.active_record.raise_in_transactional_callbacks = true,可能存在于您的环境配置中。对于我的应用程序,它被设置在config/environments/development.rbconfig/environments/test.rb中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接