方法覆盖和变量

时间:2014-02-18 09:39:26

标签: ruby variables override

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

我试图在子类destroy的对象中调用超类ModelES的方法ES,但调用中的变量@elastic_search_uri是在超级班。需要进行哪些必要的更改才能使方法调用访问子类的变量?

2 个答案:

答案 0 :(得分:1)

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

class ES < ModelES
  def initialize
    super("doctors/doctor")
  end
  ...
 end

答案 1 :(得分:0)

您有错误拼写 - 在ModelES中您调用变量@elastic_search_uri,但在ES中您将其称为@elastic_server_uri

解决这个问题,一切都应该有效。

你应该考虑根据@ Niall的答案进行重构,因为它更加封装,并有助于避免错误拼写...