2013-05-21 2 views
0

Я хочу respond_to :json в моих местоположениях_контроллера из моего местоположения и моделей пива.Контроллер Rails response_with json от двух моделей

Мой контроллер местоположения выглядит следующим образом

class LocationsController < ApplicationController 
respond_to :html, :json 
    # GET /locations 
    # GET /locations.json 
    def index 
    @locations = Location.all 
    respond_with(@locations,:only => [:id,:lat,:long,:name,:street_address,:place,:route],:methods => [:main_url, :beer_name]) 
    end 

@beer belongs_to: место, и я хотел бы: название от модели пива, которые будут добавлены к вышеуказанному ответ местонахождения. Это мой beers_controller.

class BeersController < ApplicationController 
    respond_to :html, :json 
    # GET /beers 
    # GET /beers.json 

    def index 
    @beers = Beer.where(:location_id => params[:location_id]) 
    respond_with(@beers,:only => [:id,:name,:description,:price,:style,:location_id, :brewery, :available],:methods => [:label_url])  
    end 

Как я могу это сделать? Благодарю.

ответ

0

Взгляните: https://github.com/nesquena/rabl

Rabl обеспечивает простой способ для вас, чтобы получить все отношения на объектах, и вы можете построить JSON в чистом и простом способе.

В модели пива belongs_to место, у вас есть два варианта:

  • Если место HAS_ONE пива, вы можете получить доступ к direcly location.beer.name, этот смысл, название от пива из этого места.

  • Если место has_many пиво (ы), вы можете сделать петлю для итерации по
    каждое пиво для местоположения:

Код:

location.beers.each do |beer| 
    puts beer.name 
end 
+0

Спасибо, я проверю это. Есть ли способ сделать это без добавления драгоценного камня, такого как Rabl? – jacobt

+0

Предположим, что код, который вы используете, является уродливым. Просто сравните его с моим. У вас нет рубинового стиля. Вы должны рассмотреть лучший и более простой вариант, который будет отличным для будущего вашего проекта. То, что вы сделали, - это уродливый неуправляемый хак. – jturolla

+0

Хорошо, скажем, это уродливый неудобный хак, как вы сказали. Можете ли вы предложить вариант, который выполняет мою цель, не используя драгоценный камень rabl? – jacobt

0

RABL драгоценных взглядов как хороший способ, но я решил добавить это к моей модели местоположения

def as_json(options={}) 
    super(:only => [:id,:lat,:long,:name,:street_address,:place,:route], :methods => [:main_url], 
      :include => { 
      :beers => {:only => [:name]} 
      } 
    ) 
    end 

Это трюк для меня.

+0

Даже если это исправить вашу проблему, это действительно плохой код по причинам, которые я написал выше. – jturolla

+0

Я хочу вариант, который не включает использование жемчужины rabl, и это то, что я придумал. – jacobt

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