0

我想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 我想将啤酒模型中的 :name 添加到上述位置响应中。这是我的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

我怎样才能做到这一点?谢谢。

4

2 回答 2

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

这对我有用。

于 2013-05-21T20:16:02.710 回答
0

看看: https ://github.com/nesquena/rabl

Rabl 为您提供了一种简单的方法来检索对象上的所有关系,并且您可以以一种干净简单的方式构建您的 json。

由于您的啤酒模型属于某个位置,您有两种选择:

  • 如果 location has_one 啤酒,您可以直接访问 location.beer.name,这意味着,来自该位置的啤酒的名称。

  • 如果您定位 has_many beer(s),您可以创建一个循环来迭代
    每个啤酒的位置:

代码:

location.beers.each do |beer| 
   puts beer.name
end
于 2013-05-21T18:26:37.733 回答