我希望我的location_controller中的respond_to :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:location我想:啤酒模型的名称要添加到上面的位置响应中。这是我的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 :(得分:0)
看看: https://github.com/nesquena/rabl
Rabl提供了一种简单的方法来检索对象上的所有关系,并且您可以以简洁明了的方式构建json。
由于您的啤酒模型属于某个地点,您有两种选择:
如果位置has_one啤酒,您可以直接访问
location.beer.name
,这个意思,来自啤酒的名字
位置。
如果您定位has_many beer(s),则可以循环迭代 每个啤酒的位置:
代码:
location.beers.each do |beer|
puts beer.name
end
答案 1 :(得分:0)
rabl gem似乎是一个很好的方法,但我决定将其添加到我的位置模型
def as_json(options={})
super(:only => [:id,:lat,:long,:name,:street_address,:place,:route], :methods => [:main_url],
:include => {
:beers => {:only => [:name]}
}
)
end
这对我有用。