2014-02-18 141 views
-1
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 

我试图调用超类ModelES的方法destroy在子类中ES的对象,但在呼叫变量@elastic_search_uri是在超类中定义的一个。需要进行哪些必要的更改才能使方法调用访问子类的变量?方法覆盖和变量

+0

哪一种方法子类的你想用'destroy'超类的吗? 'initialize','destroy'还是其他地方?你能否让问题更清楚? –

回答

0

你有拼写错误 - 在ModelES调用变量@elastic_search_uri,但在ES你怎么称呼它@elastic_server_uri

解决这个问题,一切都应该工作。

你应该重构根据@尼尔的回答认为,虽然,因为它是更多的封装,并有助于避免错误拼写错误......

1

您需要将initialize方法中调用super这样的:

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