使用方法调用在attr_accessor中指定属性列表

时间:2013-05-15 10:49:37

标签: ruby-on-rails-3 attr-accessor attr-accessible

我想创建大量的属性,如果用这样的方法调用构建,可以轻松完成,

 attr_accessor :attr_list 

 def attr_list
   [:x1, :y1, :x2, :y2]   
 end

这不起作用。还有其他方法可以达到这个目的吗?

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:14)

想出来,

def self.attr_list
 [:x1, :y1, :x2, :y2]   
end

attr_accessor *attr_list 

<强>解释

由于 attr_accessor 是一个需要参数列表的方法调用。所以我们不能按原样传递数组。 ( * )会将数组转换为参数列表。

只需要定义一个返回传递给attr_accessor的属性列表数组的类方法。

也适用于attr_accessible(或类似的东西)。

答案 1 :(得分:2)

在不发出警告的情况下执行此操作的一种方法:

class MyClass
    ATTR_LIST = [:x1, :y1, :x2, :y2]
    attr_accessor(*ATTR_LIST)
end

答案 2 :(得分:1)

接受的解决方案会产生红宝石警告:

  

'*'被解释为参数前缀

另一种方法是做这样的事情:

def attr_list
  [:x1, :y1, :x2, :y2]   
end

attr_list.each { |attr| attr_accessor attr }

ATTR_LIST = [:x1, :y1, :x2, :y2]
ATTR_LIST.each { |attr| attr_accessor attr }