我有一個類,我正在使用通過方法鏈構建複雜對象。我是新來的紅寶石,所以我必須在這裏丟失一些明顯的東西。我期望返回一個哈希看起來像這樣:{"must"=>[{:match=>{"status_type" : "good"}}, {:match=>{"product_age" : "old"}}]}
實例變量似乎沒有在ruby方法鏈接中填充
但我得到的是這樣的:{"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
非常感謝您爲我的代碼提供的任何燈光。
在方法的末尾沒有明確地返回某些東西,這更具有地道性。例如,在'equals'方法的最後一行,只需寫'self'而不是'return self'。 – yihangho
這應該不會有所作爲。 –
它不應該。我只是說它比較習慣,不會解決問題。 – yihangho