使用DB(RoR)中的多条记录生成json

时间:2015-02-15 21:19:02

标签: ruby-on-rails ruby json

我有以下代码,预计会返回包含多个参数从DB中选择的数据的复杂JSON,并包含其他模型的数据:

def search
params[:beacon] = [{ 'id' => 1, 'prox_uuid' => 12345453453 }, { 'id' => 2, 'prox_uuid' => 5345634564536435 }]
beacons = Beacon.includes(:ads, :venue).where("id in (?) and proximity_uuid in (?)", params[:beacon][:ids], params[:beacon][:prox_uuids])
data = beacons.map { |beacon| {
      id: beacon.id,
      name: beacon.name,
      :venue => {
          id: beacon.venue.id,
          name: beacon.venue.name,
          logo: URI.join(request.base_url, beacon.venue.logo.url).to_s
      },
      ads: beacon.ads.inject([]) do |sum, add|
        sum << {
          id: add.id,
          title: add.name,
          cover: URI.join(request.base_url, add.file_url.url).to_s,
          price: add.price,
          description: add.description
        }
      end
    }
  }
  render json: data.to_json
end

params[:beacon] = [{ 'id' => 1, 'prox_uuid' => 12345453453 }, { 'id' => 2, 'prox_uuid' => 5345634564536435 }]是来自POST请求的参数数组的占位符。

问题是我在查询行收到以下错误:

  

没有将符号隐式转换为整数

我也试过遍历循环中的参数数组并查询每条记录,但是json只生成最后一条记录。

1 个答案:

答案 0 :(得分:0)

您有params[:beacon][:ids]params[:beacon][:prox_uuids],但params[:beacon]是一个数组,所以应该用整数索引,例如。 params[:beacon][0]。因此,错误告诉您:ids(符号)无法隐式转换为整数,以便正确引用params[:beacon]数组。