2012-05-25 4 views
9

Railsでは、Productというモデルがあります。時には同時に複数のproductsを取得する必要があります(リストは完全に動的なので、Rails側では実行できません)。複数のRailsがIDで取得する

この呼び出しでは、1回の呼び出しで1,3,9,24の製品を取得する必要があるとします。これは可能ですか?もしそうなら、私はこのためのカスタムルートが必要ですか?コントローラには何を入れますか?

つまり、この作品のようなものですか? /products/1,3,9,24

+0

コントローラー/リクエストレベル、またはモデル/データベースレベルについて話していますか? – x1a4

+0

もう少し説明しなければならないでしょう。 「Rails側ではできない」とはどういう意味ですか? – tybro0103

+0

@ x1a4はい、コントローラ/要求レベル。私を編集させてください。 – Baub

答えて

24

私はあなたが経路を全く変更する必要はないと思います。コントローラ/モデルで解析するだけでよいはずです。

def show 
    @products = Product.find params[:id].split(',') 
end 

あなたがhttp://localhost/products/1,3,9,24にリクエストを送信した場合、@productsは4つのレコードを返す必要があります。

+1

これはうまくいきます! :)ありがとう。 – Baub

+0

ありがとうございました! –

3
Product.where(:id => params[:ids].split(',')) 
+0

これは動作しますが、ルートは必要ありません。 – Baub

+1

ワイルドカードはすべてを捕捉するので、/ products/1,2,3,4/editにリクエストを送信すると、params [:ids]には「1,2,3,4/edit」が含まれます –

+0

あなたが最後にそれを置いても大丈夫だと知っています –

5

私は種類の検索のように、限られた範囲でのインデックスにこの要求を検討しますので、私はどうなる:

class ProductsController < ApplicationController 
    def index 
    @products = params[:product_ids] ? Product.find(params[:product_ids]) : Product.all 
    end 
end 

をしてから、URLアレイとこれにリンクされています

<%= link_to 'Products', products_path(:product_ids => [1, 2, 3]) %> 

これは一種の

product_ids[]=1&product_ids[]=2 ... 

役に立てば幸いように見える標準的な非インデックス付きのURLの配列を作成します。

+0

完全に同意します。このリクエストを 'index'アクションで処理することは、おそらくコントローラロジックの残りの部分でうまくいくでしょう。 – colllin

関連する問題