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
是在超级班。需要进行哪些必要的更改才能使方法调用访问子类的变量?
答案 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的答案进行重构,因为它更加封装,并有助于避免错误拼写...