Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何初始化对象的属性_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 如何初始化对象的属性

Ruby on rails 如何初始化对象的属性,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个公制等级: class Metric < ApplicationController attr_accessor :capability, :behavior def initialize(family_id) @capability = 5 end end 然后,我尝试使用以下方法获取capability属性: puts metrics.capability 但我有一个错误: NoMethodError Exception: private meth

我有一个公制等级:

class Metric < ApplicationController

  attr_accessor :capability, :behavior

  def initialize(family_id)
    @capability = 5
  end 
end
然后,我尝试使用以下方法获取capability属性:

puts metrics.capability
但我有一个错误:

NoMethodError Exception: private method `capability' called for #<Metric:0xa7bb4b0 @capability=5>
NoMethodError异常:调用了私有方法'capability'#

我做错了什么?

您不需要从
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
类度量
属性访问器:功能,:行为
def初始化(族id)
@能力=5
结束
结束
类ApplicationController
根据评论进行编辑: 您正在继承自
ApplicationController
。只有当您想编写一些
操作时,才应该继承它。要编写
自定义类
,无需执行任何操作。如果需要,您可以继承
ActiveRecord::Base

由于在类
metric
中有
initialize
方法,您甚至不需要
AR

为什么有效


我们刚刚使用了
before\u filter
回调函数来初始化属性。其简单的Ruby和Rails概念

您确定
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