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