我有一个课程,我通过方法链接使用构建复杂对象。我是红宝石的新手,所以我必须在这里遗漏一些明显的东西。我希望返回一个如下所示的哈希:{"must"=>[{:match=>{"status_type" : "good"}}, {:match=>{"product_age" : "old"}}]}
但我得到的是:{"must"=>[{:match=>{}}]}
我为上述尝试调用以下代码:
builder = QueryBuilder.new
built = builder.must("status_type").equals("good").must("product_age").equals("old")
built.serialize_this
这是我的班级。我非常感谢任何帮助,因为我对Ruby很陌生。
class QueryBuilder
attr_accessor :query_hash, :context, :condition_hash
def initialize
@query_hash = {}
@condition_hash = {}
end
def serialize_this
return @query_hash
end
def must(search_field)
@context = "must"
@condition_hash[search_field] = "temp"
return self
end
def should(search_field)
@context = "should"
@condition_hash[search_field] = "temp"
return self
end
def equals(value_field)
search_field = @condition_hash.keys[0].to_s
@condition_hash[search_field] = value_field
match_hash = {}
match_hash[:match] = @condition_hash
an_array =[]
an_array << match_hash
@query_hash[@context] = an_array
@condition_hash.clear
return self
end
end
提前感谢您提供的任何关于我的代码的光线。
答案 0 :(得分:1)
执行此操作时:
match_hash [:match] = @condition_hash
你没有在那里放一个哈希的副本,你引用一个哈希的引用。它是您稍后清除的相同哈希值。