iOS 获取带有参数的 Rails API 请求

问题描述 投票:0回答:1

在我的 Rails 应用程序中:

  • 地点有很多啤酒

  • 啤酒属于_to location

当 iOS 应用程序调用

locations/%@/beers.json
时,我希望啤酒控制器仅响应从我的 iOS 应用程序调用的
location_id
的啤酒。

这是当用户点击位置 1 时客户端发送的请求。

Started GET "/locations/1/beers.json" for 127.0.0.1 at 2013-03-09 11:26:16 -0700
Processing by BeersController#index as JSON
  Parameters: {"location_id"=>"1"}
  Beer Load (0.1ms)  SELECT "beers".* FROM "beers" 
Completed 200 OK in 12ms (Views: 1.8ms | ActiveRecord: 0.4ms)

这是我的啤酒控制器代码:

class BeersController < ApplicationController

  def index
    @beers = Beer.all
    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @beers }
    end
  end

现在,这会向客户端返回所有啤酒的列表,无论其

location_id
如何。

到目前为止我已经尝试过:

class BeersController < ApplicationController

  def index
    @beers = Beer.find(params[:location_id])
    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @beers }
    end
  end

但是即使我得到状态 200,iOS 应用程序也会崩溃:

 Started GET "/locations/1/beers.json" for 127.0.0.1 at 2013-03-09 11:19:35 -0700
    Processing by BeersController#index as JSON
      Parameters: {"location_id"=>"1"}
      Beer Load (0.1ms)  SELECT "beers".* FROM "beers" WHERE "beers"."id" = ? LIMIT 1  [["id", "1"]]
    Completed 200 OK in 2ms (Views: 0.6ms | ActiveRecord: 0.1ms)

上面的要求不应该是:

Beer Load (0.1ms)  SELECT "beers".* FROM "beers" WHERE "beers"."location_id" = ? LIMIT 1  [["location_id", "1"]
]

如何更改我的控制器,以便它响应仅属于客户端发送的 location_id 的啤酒?

ios ruby-on-rails parameters afnetworking
1个回答
2
投票

首先,如果您正在寻找 RESTful 服务,那么您正在寻找的操作是

show
,而不是
index

要修复您提到的错误,您需要将查询更改为:

@beers = Beer.where(:location_id => params[:location_id])

假设

location_id
是您正在寻找的字段。

我会仔细查看你的路线,它定义了你的网址。 他们不遵循正常惯例。

/locations/...
将属于
Location
资源。

/beers/...
将属于
Beer
资源。

你当前的路线破坏了惯例(这对你不利)。

© www.soinside.com 2019 - 2024. All rights reserved.