【发布时间】:2013-05-15 10:49:37
【问题描述】:
我想创建大量的属性,如果用这样的方法调用来构建,可以轻松完成,
attr_accessor :attr_list
def attr_list
[:x1, :y1, :x2, :y2]
end
这不起作用。有没有其他方法可以做到这一点?
任何帮助将不胜感激。
【问题讨论】:
标签: ruby-on-rails-3 attr-accessor attr-accessible
我想创建大量的属性,如果用这样的方法调用来构建,可以轻松完成,
attr_accessor :attr_list
def attr_list
[:x1, :y1, :x2, :y2]
end
这不起作用。有没有其他方法可以做到这一点?
任何帮助将不胜感激。
【问题讨论】:
标签: ruby-on-rails-3 attr-accessor attr-accessible
想通了
def self.attr_list
[:x1, :y1, :x2, :y2]
end
attr_accessor *attr_list
说明:
因为 attr_accessor 是一个需要参数列表的方法调用。所以我们不能按原样传递数组。 (*) 将数组转换为参数列表。
只需要定义一个类方法返回传递给attr_accessor的属性列表数组。
也适用于 attr_accessible(或任何类似的东西)。
【讨论】:
在不引起警告的情况下执行此操作的一种方法:
class MyClass
ATTR_LIST = [:x1, :y1, :x2, :y2]
attr_accessor(*ATTR_LIST)
end
【讨论】:
接受的解决方案会产生红宝石警告:
'*' 解释为参数前缀
另一种方法是这样做:
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 }
【讨论】: