如何初始化对象的属性

时间:2014-07-02 17:29:25

标签: ruby-on-rails ruby

我有一个Metric类:

class Metric < ApplicationController

  attr_accessor :capability, :behavior

  def initialize(family_id)
    @capability = 5
  end 
end

在控制器中我做:

metrics = Metric.new(222)

然后我尝试使用:

获取capability属性
puts metrics.capability

但是我收到了错误:

NoMethodError Exception: private method `capability' called for #<Metric:0xa7bb4b0 @capability=5>

我做错了什么???

1 个答案:

答案 0 :(得分:1)

您不需要继承ApplicationController。停止继承它,它将开始工作。

如果要在所有操作中初始化属性,您只需要执行此操作

class Metric 

  attr_accessor :capability, :behavior

  def initialize(family_id)
    @capability = 5
  end 
end


 class ApplicationController < ActionController::Base
  before_action :initialize_metric_attribute

   def initialize_metric_attribute
     @capability = Metric.new(10)
   end
 end

根据评论进行编辑: 您继承自ApplicationController。它只应在您想要编写一些action时继承。写custom classes时,你不需要做任何事情。如果需要,您可以继承ActiveRecord::Base

由于您的班级initialize课程中有metric方法,因此您甚至不需要AR

  

为什么会有效?

我们刚刚使用before_filter回调来初始化您的属性。它简单的Ruby和Rails概念。