我有一个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>
我做错了什么???
答案 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概念。