2016-05-29 3 views
3

Странная проблема. Если класс внизу был модулем, разделил Json без проблем, если это были только методы, также работает, но проблема в том, что .. когда это класс, он больше не разбивает Json и возвращает пустой массив .. однако, если быть классом, я делаю объект, он на самом деле его кладет. Любые мысли о том, почему? Как я могу это исправить?Rails API Не разделяет Json

У меня есть этот контроллер:

def index 
    begin 
    call_employee_work_locations_api 
     rescue => ex 
     render :json => {"service unavailable": "0001" }, :status => :service_unavailable 
    end 
end 

У меня есть этот сервис:

def call_employee_work_locations_api 
    auth = {:username=>ENV["USERNAME"], :password=>ENV["PASSWORD"]} 
    employee_locations = HTTParty.get(employee_work_Location_url , :basic_auth => auth) 
    #serialize_work_location(employee_locations) 
    serializer = EmployeeSerializer.new 
    serializer.serialize_work_location(employee_locations) 
end 

У меня есть этот строитель:

json.array!(@top_locations) do |location| 
    json.extract! location, :name, :description, :latitude, :longitude 
end 

У меня есть этот класс:

class EmployeeSerializer 

    def serialize_work_location(employee_locations) 
     employee_locations= JSON.parse(employee_locations) 
     locations=[] 

     employee_locations["work_locations"].each do |attributes| 
      location = Location.new(attributes["latitude"],attributes["longitude"],attributes["description"],attributes["name"]) 
      locations.push(location) 
     end 
     employee_locations_selector(locations) 
    end 

    def top_office_location_selector(locations, city) 
     top_locations=[] 
     locations.each do |office| 
      if office.name == city[0] then top_locations.push(office) end 
      if office.name == city[1] then top_locations.push(office) end 
     end 
     @top_locations = top_locations 
     p @top_locations <--- it prints the object perfectly, but does not pass to the view, I get an empty array instead. 
    end 

    def employee_locations_selector(locations) 
     city = locations.each_with_object(Hash.new(0)) { |locations, counts| counts[locations.name] += 1 }.max_by{|k,v| v} 
     top_office_location_selector(locations, city) 
    end 
end 

ответ

1

Переменная экземпляра @top_locations устанавливается в рамках класса EmployeeSerializer, а не вашего контроллера. Таким образом, это просто обычная переменная экземпляра, и поэтому Rails ничего не знает об этом. Вы можете присвоить возвращаемое значение #top_office_location_selector переменной экземпляра в контроллере, и она должна работать.

На боковой ноте код будет очищен, используя #map над #each.

+0

Не могу поверить, что я этого не видел .. честно: | большое спасибо – Hedu

Смежные вопросы