代码之家  ›  专栏  ›  技术社区  ›  Nick Res

命名空间模型不适用于多态性,我需要一种解决方法

  •  0
  • Nick Res  · 技术社区  · 7 年前

    class Accounting::Request::Check < ActiveRecord::Base
      has_one :accounting_request, as: :requestable
    end
    
    class Accounting::Request < ActiveRecord::Base
      belongs_to :requestable, polymorphic: true
    end
    
    
    cr = Accounting::Request::Check.create!()
    cr.create_accounting_request
    

    结果:

    NameError: uninitialized constant Accounting::Request::Check::AccountingRequest
    

    我的问题是,在迁移到rails 5之前,我暂时如何解决这个问题?

    One solution 我发现是要添加类名:“::ClassName”,但这对我不起作用。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Nick Res    7 年前

    是的,rails确实支持命名空间模型上的多态性。。。

    以下是使其生效的修订代码:

    class Accounting::Request < ActiveRecord::Base
      belongs_to :requestable, polymorphic: true
    end
    
    class Accounting::CheckRequest < ActiveRecord::Base
      has_one :accounting_request, as: :requestable, class_name: 'Accounting::Request'
    end
    

    class_name 需要在“-able”模型上,并且需要完全指定包含的类 belongs_to .

    也不是我用的 has_one has_many .