Ruby on rails 3 使用方法调用在attr\u访问器中指定属性列表

Ruby on rails 3 使用方法调用在attr\u访问器中指定属性列表,ruby-on-rails-3,attr-accessor,attr-accessible,Ruby On Rails 3,Attr Accessor,Attr Accessible,我想创建大量的属性,如果用这样的方法调用构造,这些属性可以轻松完成 attr_accessor :attr_list def attr_list [:x1, :y1, :x2, :y2] end 这是行不通的。有没有其他方法可以做到这一点 任何帮助都将不胜感激。解决了这个问题 def self.attr_list [:x1, :y1, :x2, :y2] end attr_accessor *attr_list 说明: Asattr\u访问器是一个方法调用,

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

 attr_accessor :attr_list 

 def attr_list
   [:x1, :y1, :x2, :y2]   
 end
这是行不通的。有没有其他方法可以做到这一点

任何帮助都将不胜感激。

解决了这个问题

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

attr_accessor *attr_list 
说明:

Asattr\u访问器是一个方法调用,它需要参数列表。所以我们不能按原样传递数组。(*)将数组转换为参数列表

只需要定义一个类方法,返回传递给attr_访问器的属性列表数组


与attr_accessible(或任何类似产品)配合使用也很好

接受的解决方案会产生一个ruby警告:

“*”解释为参数前缀

另一种方法是这样做:

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

attr_list.each { |attr| attr_accessor attr }


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

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

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