Ruby on rails 定义多个与自定义名称相关的setter方法

Ruby on rails 定义多个与自定义名称相关的setter方法,ruby-on-rails,ruby,Ruby On Rails,Ruby,我想定义多个自定义方法来为UserConcern中的自定义用户字段设置值,这些字段不存储在DB中,而是从外部源获取的。我尝试了下面的代码,结果为UserConcern:Module(namererror) 我显然不能在顶层使用这种方法。如果我切换到在关注点中使用常量变量,例如CUSTOM\u FIELDS=[:custom1,custom2,…],这将起作用,但它不是动态的,每次更改、添加或删除字段时,我都必须更改它。在类级别执行get\u CUSTOM\u attrs,而def get_cus

我想定义多个自定义方法来为UserConcern中的自定义用户字段设置值,这些字段不存储在DB中,而是从外部源获取的。我尝试了下面的代码,结果为UserConcern:Module(namererror)


我显然不能在顶层使用这种方法。如果我切换到在关注点中使用常量变量,例如
CUSTOM\u FIELDS=[:custom1,custom2,…]
,这将起作用,但它不是动态的,每次更改、添加或删除字段时,我都必须更改它。

在类级别执行get\u CUSTOM\u attrs
,而
def get_custom_attrs
在实例级别定义方法。您需要
get\u custom\u attrs
作为类方法存在,因此您需要

class MyAwesomeClass
  class << self
    private
    def get_custom_attrs
      [:a1,:a2,:a3] # or whatever
    end
  end
  get_custom_attrs.each do |attr|
    # Some stuff happens here
  end
end
class MyAwesomeClass

类我根本看不到这里定义的
get\u attrs
方法,但是您可以使用
attr\u访问器*get\u custom\u attr
为定义的键创建虚拟属性(因为你在帖子中说你想设置值,你的代码建议检索。这是一个打字错误。修复了它,它应该是
get_custom_attrs
。我如何保持将
get_custom_attrs
方法私有化的原始想法?如果我想在类级别和实例级别上使用它呢?我需要在另一个级别上使用它方法,它将不起作用。@abpetkov,通常对于这样的事情,我有类似于
def the_method;self.class.the_method;end
,但Ruby中私有方法的定义是它不能用接收器调用,因此会抛出异常。在这种情况下,
get_custom_attrs
实际上不是私有方法,或者您完全确定它是,但仍然希望通过使用send来解决这个问题,因此您可以编写类似于
def the_方法;self.class.send(:the_方法);end
@ymbirrt还有一件事,但由于某些原因,包含符号数组的OuterConcern::字段将无法工作。如您所述对数组进行硬编码可以工作,但这不是我想做的。@abpetkov,
[:a1,:a2,:a3]
可以替换为任意代码,我的答案中被剪掉的只是一个例子。请注意,它将在定义类时执行,以后不再执行。至于
OuterConcern::FIELDS
由于某种原因无法工作,我恐怕无法对此进行调查,这听起来像是一个单独的问题。
class MyAwesomeClass
  class << self
    private
    def get_custom_attrs
      [:a1,:a2,:a3] # or whatever
    end
  end
  get_custom_attrs.each do |attr|
    # Some stuff happens here
  end
end