gpt4 book ai didi

ruby-on-rails - Rails 类命名冲突

转载 作者:行者123 更新时间:2023-12-04 16:52:23 24 4
gpt4 key购买 nike

在我的 rails 应用程序中,我有以下内容:

  • Post模型
    class Post < ActiveRecord::Base
    # ...
    end
  • Post这种模块内的模型
    # lib/my_module/models.rb
    module MyModule
    module Models
    class AbstractTable < ActiveRecord::Base
    self.abstract_class = true
    end

    class Comment < AbstractTable
    belogs_to :post
    end

    class Post < AbstractTable
    has_many :comments
    end
    end
    end

  • 两者 Post模型具有不同的字段集并连接到不同的数据库:
  • Post -> Postgresql 适配器
  • MyModule::Models::Post -> SQLite 适配器

  • 有时 (取决于种子值),在运行测试套件时,我得到了一个 super 奇怪的常量 (?) collition: in place, where original Post提到了常量(在创建/更新操作中)我收到错误,它缺少来自 MyModule::Models::Post 的字段, 而在某些地方, MyModule::Models::Post提到 - 我收到一个错误,该模型缺少来自原点的属性 Post .

    补充线索:
  • 我只用 MyModule::Models::PostMyModule范围,调用 Models::Post ,
  • 我从不使用 MyModule::Models::Post在lib之外。
  • 所有“不同”的模型都保存在一个文件中,lib/my_module/models.rb
  • 如果我登录到 pry失败规范的 session ,在 ruby​​ 吹嘘 MyModule::Models::Post 的那一行之前没有它应该有的字段(而是来自 Post 的字段):调用 MyModule::Models::Post退给我原件 Post模型课!

  • 我错过了什么?这是一个rspec问题吗?我是在搞乱惯例还是什么?

    更新 1 .我试图拆分 Models模块,将每个附加模型放入一个单独的文件中。不走运——同样的错误

    更新 2 .另一个想法是:因为 Comment模型在 Post 之前定义, Ruby 尝试加载原始 Post第一的。仍然,移动 Post建模没有帮助。

    更新 3 . RSpec 有 this犯罪。仍然,更新 Gemfile 的 rspec-mock从github指向没有帮助。

    最佳答案

    你应该明确地告诉 Rails 你的期望:

     belongs_to :post, class_name: 'MyModule::Models::Post'

    关于ruby-on-rails - Rails 类命名冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14851281/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com