2011-08-09 17 views
0

私は、ルビー1.8.6、レール2.3.8を使用しています。ここでサンプルテーブルの2つの異なるフィールドからデータを取得する方法

、私はRailsの中に複数のコンボボックスに問題があり、

  1. 製品は、リスト
  2. SKUのドロップダウンリスト(生産の選択によって異なります)

製品テーブルのフィールドをドロップダウンしています

id name 

Skuのテーブルフィールドには、

id name product_id alias_id 

エイリアステーブルのフィールドは、例えば

id name 

ある私は

コントローラーで
id name product_id alias_id 
    1. 100-m  1  10 
    2. 10-ml  1  NULL 
    3. 150  1  2 
    4. 200-m  1  10 
    5. 300-m  1  10 

以下のようなSKUのテーブルのデータを持っている私のようなクエリを書かれ、

 @skus = Sku.all(:conditions => ["product_id = ? ", 
    params[:id]],:select=>"skus.id, 
    CASE when skus.alias_id IS NOT NULL then (SELECT alias.name FROM alias WHERE 
    alias.id = skus.alias_id group by alias.name) END AS 'skus_name'", 
    :order=>"skus_name" ,:include=>[:alias]) 

このクエリ書かれた出力のように、

 id skus_name 
     1. 100gms 
     2. 10-ml 
     3. 150-ml 
     4. 100gms 
     5. 100gms 

個別の結果を得る方法を教えてもらえますか?あなたが返され@sku変数にUNIQを呼び出すことができますいずれかの事前

答えて

0

感謝。

@skus = Sku.all(:conditions => ["product_id = ? ", 
    params[:id]],:select=>"skus.id, 
    CASE when skus.alias_id IS NOT NULL then (SELECT alias.name FROM alias WHERE 
    alias.id = skus.alias_id group by alias.name) END AS 'skus_name'", 
    :order=>"skus_name" ,:include=>[:alias]).uniq 

これは同じDB選択を実行しますが、ルビで一意の結果を得ます。

代替は、データベース内で一意の結果が得られます選択

@skus = Sku.all(:conditions => ["product_id = ? ", 
    params[:id]],:select=>"skus.id, 
    CASE when skus.alias_id IS NOT NULL then (SELECT DISTINCT alias.name FROM alias WHERE 
    alias.id = skus.alias_id group by alias.name) END AS 'skus_name'", 
    :order=>"skus_name" ,:include=>[:alias]) 

これでDISTINCTを使用することです。

ルビでuniqを実行するよりも速くなければならないので、2番目のオプションを使用します:)

関連する問題