【发布时间】:2018-10-31 17:47:45
【问题描述】:
我有 3 个模型,每个模型都有一个 hstore 列,其中可能包含相同的 4 个属性。促进这些 hstore 属性的代码包括 store_accessor 调用、用于与强参数共享这些 hstore 属性的方法以及其他一些方法。
非常相似(如果不准确的话)代码存在于 3 个不同的类中。
store_accessor 调用实际上被包装在一个循环中,该循环遍历一个类方法,该方法返回一个属性名称列表(对于 3 个模型中的每一个,属性名称可能是唯一的,也可能不是唯一的)。
class Foo
def self.array_of_attrs
%w(one two three)
end
Foo.array_of_attrs.each do |a|
...
store_accessor :hstore_col_name, "#{ a }_yada_yada".to_sym
end
很简单.. 但是,我想将所有这些代码移至关注点(嘘声,嘶嘶声),并与 3 个受影响的类中的每一个分享该关注点。我遇到的问题是......我不知道哪个班级目前正在关注这个问题。换句话说,Foo,不是 Foo……它是 3 个类中的任何一个使用关注点。
在关注点中,我如何使用当前类?在这个例子中,我将如何动态调用当前类而不是调用 Foo 类?
【问题讨论】:
-
你试过
self.class吗? -
我有...但是,self 是类。在类方法上调用 self 就像调用 self.self.xyz_method。我认为,也许,有点......就像,即使你想在类中调用一个类方法,你也不能使用 self ......你必须从内部调用类。我也觉得很困惑。
-
您是否在关注点而不是课堂上尝试过使用代码?顺便说一句,确实是关心(嘘声,嘶嘶声)。
-
我有...也许,我需要另一种 DRY 方法。不使用关注点的一种。
-
我也觉得你的问题有点混乱,你试过
self(不是self.class)吗?如果您在问题中包含关注点以及哪些类包含它,这将很有用。随着Foo的实例尝试运行该函数。也许我们可以找到另一种 DRY 方法。
标签: ruby-on-rails activesupport-concern