私のレールアプリで
ロケーション have_many ビール
ビールの所属場所
iOS アプリが呼び出したときに、iOS アプリlocations/%@/beers.json
から呼び出されている location_id にのみ属するビールで Beers Controller が応答するようにします。
ユーザーが場所 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 にのみ属するビールで応答するようにコントローラーを変更するにはどうすればよいですか?