ruby-on-rails – 解决Rails应用程序中的类名冲突
发布时间:2020-12-17 04:32:10 所属栏目:百科 来源:网络整理
导读:我一直在构建一个执行会计功能的Rails应用程序.作为其中的一部分,我有一个类名为Transaction的模型.到目前为止一直很好,我已经建立了这个功能一个月左右,一切都按预期工作. 到现在… 我刚刚发现一些使用Ruport库在几个月前开发的旧报告功能已停止工作.看来,R
我一直在构建一个执行会计功能的Rails应用程序.作为其中的一部分,我有一个类名为Transaction的模型.到目前为止一直很好,我已经建立了这个功能一个月左右,一切都按预期工作.
到现在… 我刚刚发现一些使用Ruport库在几个月前开发的旧报告功能已停止工作.看来,Ruport在生成PDF时,需要一个也有一个名为Transaction的类/模块的库. TypeError in Admin/team reportsController#generate Transaction is not a module ... This error occurred while loading the following files: pdf/writer transaction/simple 所以,我正在寻找一个快速解决方案.一个希望不涉及重命名我的交易模型和重构最后几周的代码. 期待一些聪明的建议:) 解决方法
我相信这个问题归结为需要PDF :: Writer gem的Ruport,后者又需要Transaction :: Simple gem来定义模块Transaction.
在ActiveRecord中肯定有#transaction方法,但我不认为Rails中有一个Transaction模块或类.我很乐意在那个问题上得到纠正. 命名空间通常是避免这样命名冲突的最佳实践.例如. module Account class Transaction < ActiveRecord::Base .... end end 但是,命名空间ActiveRecord模型可能会引发其他问题. 尽管可能很耗时,但重命名您的交易模型可能是最好的选择. 如果需要,您仍然可以保留现有的事务数据库表,因此通过在模型中放置self.table_name =“transactions”,您的迁移不需要更改. 通过在关联调用中指定class_name,您与其他模型的关联仍可以命名为“transaction(s)”.例如. class User < ActiveRecord::Base has_many :transactions,:class_name => "AccountTransaction" end 这两个建议可能会或可能不会为您节省一些时间. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |