Ruby 方法重写和变量 类模型 def初始化(型号名称) @elastic_search_uri=$search_server+'/'+model_name.to_s+'/' 结束 def创建(模型) RestClient.put@elastic_search_uri+model.id.to_s,model.to_json 结束 def更新(型号) RestClient.delete@elastic\u search\u uri+model.id.to\s RestClient.put@elastic_search_uri+model.id.to_s,model.to_json 结束 def销毁(型号) RestClient.delete@elastic\u search\u uri+model.id.to\s 结束 结束 类ES

Ruby 方法重写和变量 类模型 def初始化(型号名称) @elastic_search_uri=$search_server+'/'+model_name.to_s+'/' 结束 def创建(模型) RestClient.put@elastic_search_uri+model.id.to_s,model.to_json 结束 def更新(型号) RestClient.delete@elastic\u search\u uri+model.id.to\s RestClient.put@elastic_search_uri+model.id.to_s,model.to_json 结束 def销毁(型号) RestClient.delete@elastic\u search\u uri+model.id.to\s 结束 结束 类ES,ruby,variables,overriding,Ruby,Variables,Overriding,我试图在子类ES的对象中调用超类ModelES的方法destroy,但是调用中的变量@elastic\u search\u uri是在超类中定义的。为了使方法调用能够访问子类的变量,需要进行哪些必要的更改?您需要在initialize方法中调用super,如下所示: class ModelES def initialize(model_name) @elastic_search_uri = $search_server + '/' + model_name.to_s + '/' end

我试图在子类
ES
的对象中调用超类
ModelES
的方法
destroy
,但是调用中的变量
@elastic\u search\u uri
是在超类中定义的。为了使方法调用能够访问子类的变量,需要进行哪些必要的更改?

您需要在
initialize
方法中调用
super
,如下所示:

class ModelES
 def initialize(model_name)
   @elastic_search_uri = $search_server + '/' + model_name.to_s + '/'
 end

 def create(model)
   RestClient.put @elastic_search_uri + model.id.to_s, model.to_json
 end

 def update(model)
   RestClient.delete @elastic_search_uri + model.id.to_s
   RestClient.put @elastic_search_uri + model.id.to_s, model.to_json
 end

 def destroy(model)
   RestClient.delete @elastic_search_uri + model.id.to_s
 end
end

class ES < ModelES
 def initialize
   @elastic_server_uri = $search_server + 'doctors/doctor/'
 end
 def create(es)
   #overriden code
 end

 def update(es)
   #overriden code
 end
end
classes
您有一个拼写错误-在
ModelES
中,您调用变量
@elastic\u search\u uri
,但在
ES
中,您调用它
@elastic\u server\u uri

修好了,一切都会好起来的


你应该根据@尼尔的答案考虑重构,因为它是更封装的,并且有助于避免拼写错误。

你想使用哪个子类的方法?代码>初始化,
销毁
还是其他地方?你能把问题说清楚吗?
class ES < ModelES
  def initialize
    super("doctors/doctor")
  end
  ...
 end