ruby on rails - NoMethodError undefined method `[]=' for nil:NilClass -


i created multiple classes 1 test method test wither ruby objects serialized correctly.

the error returned:

undefined method `[]=' nil:nilclass     /users/horse/workspace/queryapi/app/models/query_model.rb:193:in `serialize' 

i run below test_query method through rails console initializing querymodeltester , invoking test_query() method on object.

my code:

class querymodeltester   def test_query     must = must.new     range_criteria = rangecriteria.new      range_criteria.gte = 20140712     range_criteria.lte = 1405134711      range = rangebuilder.new     range.search_field = "created_time"     range.range_criteria = range_criteria      must.range = range     bool = bool.new     bool.must = must      main_query = bool.serialize     puts main_query   end end 

here model classes above class testing:

class rangecriteria       @query_hash = hash.new   attr_accessor :gte, :lte    def serialize     if(@gte.present?)       @query_hash[:gte] = @gte     end      if(@lte.present?)       @query_hash[:lte] = @lte     end      if(@gte.present? || @lte.present?)        return @query_hash     end   end end   class rangebuilder   @query_hash = hash.new   attr_accessor :search_field, :range_criteria    def serialize     if(@search_field.present?)       @query_hash[@search_field] = @range_criteria.serialize       return @query_hash[:range] = @query_hash     end   end     end  class bool   @query_hash = {}   attr_accessor :must    def serialize     if( @must.present? )       @query_hash[:must] = @must.serialize       return @query_hash[:bool] = @query_hash     end   end end 

the problem when initialize @query_hash. in classes initialized in wrong scope. fix it, should move @query_hash = hash.new initialize method, like:

class rangecriteria   def initialize     @query_hash = hash.new   end     # ... end  class rangebuilder   def initialize     @query_hash = hash.new   end     # ... end  class bool   def initialize     @query_hash = hash.new   end     # ... end 

hope helps.

good luck!


Comments