实例变量似乎不会用ruby方法链接填充

时间:2015-07-22 00:03:35

标签: ruby-on-rails ruby

我有一个课程,我通过方法链接使用构建复杂对象。我是红宝石的新手,所以我必须在这里遗漏一些明显的东西。我希望返回一个如下所示的哈希:{"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

提前感谢您提供的任何关于我的代码的光线。

1 个答案:

答案 0 :(得分:1)

执行此操作时:

match_hash [:match] = @condition_hash

你没有在那里放一个哈希的副本,你引用一个哈希的引用。它是您稍后清除的相同哈希值。

Is Ruby pass by reference or by value?