我有一个关注来设置一些常用的关联(除其他外),但我需要根据使用关注的类进行一些小的调整。我的基本顾虑是这样的:
module Organizable
extend ActiveSupport::Concern
included do
has_many :person_organizations
has_many :organizations,
through: :person_organizations,
class_name: <STI CLASS NAME HERE>
end
end
```
如您所见,我希望能够更改组织关联中的类名。
我在想我可以包含一些类方法来提供这种支持,但我无法弄清楚我们如何继续获取这个值。这是我如何看待自己使用它的方式:
class Dentist < Person
include Organizable
organizable organization_class: DentistClinic
end
这是我当前版本的代码:
module Organizable
extend ActiveSupport::Concern
module ClassMethods
attr_reader :organization_class
private
def organizable(organization_class:)
@organization_class = organization_class
end
end
included do
has_many :person_organizations
has_many :organizations,
through: :person_organizations,
class_name: self.class.organization_class.name
end
end
我认为这至少有两个问题:
1).organization_class
在建立关联时似乎没有定义该方法,因为NoMethodError: undefined method
当我加载 Dentist 模型时,我得到了 Class:Class` 的 organization_class'。
2)我猜在我什至将类传递给关注点(organizable organization_class: DentistClinic
行)之前,关注点内部的关联将被评估,所以它无论如何都不包含值。
我真的不确定如何解决这个问题。有没有办法将此参数传递给关注点并使用此值设置关联?
我所做的几乎与那篇文章中概述的完全一样。我的用例有所不同,因为我试图使用参数来配置在 Concern 中定义的关联。