【问题标题】:Specify attribute list in attr_accessor with method call使用方法调用在 attr_accessor 中指定属性列表
【发布时间】: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


    【解决方案1】:

    想通了

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

    说明:

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

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

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

    【讨论】:

    • 谢谢 - 非常感谢
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      '*' 解释为参数前缀

      另一种方法是这样做:

      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 }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-12
        • 2012-08-14
        • 2019-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多