gpt4 book ai didi

ruby - rails sti 和命名空间重复模型名称

转载 作者:行者123 更新时间:2023-12-04 16:58:05 27 4
gpt4 key购买 nike

在我的 Rails 应用程序中,我有这样的模型

class Account < ActiveRecord::Base
class Account::Bonus < Account
class Account::Virtual < Account
...more

而像这样
class DiscountSystem  < ActiveRecord::Base
class DiscountSystem::MyFirst < DiscountSystem
class DiscountSystem::MySecond < DiscountSystem

帐户和折扣系统 - STI 模型

之后,希望DiscountSystem有Account,只对DiscountSystem进行账户,并命名新模型Account::DiscountSystem

如果我理解正确,“帐户”的“折扣系统”在命名空间“帐户”中。

他们:
class Account::DiscountSystem < Account
belongs_to :discount_system,class_name: '::DiscountSystem',:foreign_key => :owner_id
end


 class DiscountSystem  < ActiveRecord::Base
has_one :account, :class_name => 'Account::DiscountSystem',:foreign_key => :owner_id
end

如果我在控制台中尝试
>> DiscountSystem::MyFirst.all
LoadError: Expected C:/.../app/models/account/discount_system.rb to define DiscountSystem
>> DiscountSystem.all
NoMethodError: undefined method `all' for DiscountSystem:Module

为什么?
我可能对命名空间的概念非常误解。

当然,如果我将 Account::DiscountSystem 重命名为 Account::ForDiscountSystem,则一切正常。为什么命名空间中的帐户“重写”根名称 DiscountSystem?

最佳答案

我建议不要使用 class Account::Bonus < Account但是 class Bonus < Account反而。您基本上是在重复 Account::前缀,因为它已经从 DiscountSystem 继承。

那么你也可以放下class_name belongs_to 中的参数/has_one方法调用。

这样做将使您的代码更容易理解,并且更符合 Rails 的精神。

关于ruby - rails sti 和命名空间重复模型名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15105860/

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