2012-01-12 2 views
0

親のテーブルのキーに基づいて子オブジェクトを取得しようとしています。たとえば、Storesテーブルへの "store_id"キーを含むCustomerクラスがあります。顧客が「store_id」キーを持っている場合、親CustomerオブジェクトではなくそのStoreオブジェクトを戻したいと思います。Ruby、キーによる子オブジェクトの取得

EDIT:ここでは、私が何をしようとしているかを示すSQL文があります。

したがって、SQL文は次のようになります。

"の店舗を選択します。*顧客からのINNERがONの店舗を登録しようcustomers.store_id = storeS.id WHERE customers.id = '9'"

は、私はSQLはおそらく間違っている知っているが、thatsの非常に簡潔な方法へそれを示す。

+0

あなたは「戻す」とはどういう意味ですか?あなたがしようとしているもののサンプルコードを表示できますか? – Mischa

+0

@ミスチャだから、SQL文はこのようになります。 –

+0

もしそれがあなたが望むなら、あなたはPinnyMの答えに従うべきです。 – Mischa

答えて

5

(ActiveRecordを使用して)すぐに使用できる設定のレールを使用しているとします。

慣例では、 "customers"テーブルの "store_id"キーは "stores"テーブルの "id"フィールドと一致する必要があります。あなたはまた、次のクラスモデルのセットアップが必要です:あなたが店の鍵を持っている場合は、これが真実であると仮定すると、

class Store < ActiveRecord::Base 
    has_many :customers # this is not required for what you want to do here, but recommended 
end 

class Customer < ActiveRecord::Base 
    belongs_to :store 
end 

を、あなたはこれを行うことができ、次のいずれか

# assuming we have store key == 9 
Store.find(key) 

それとも、既に持っている場合は、これを行うことができます顧客:

# assuming we have customer.store_id == 9 
customer.store 

それともあなただけの顧客キーがある場合:

# assuming we have a customer key == 9 
customer = Customer.find(9) 
store = customer.store 
+0

'customer.store'が動作するためには、'顧客 'モデルで' belongs_to:store'が定義されている必要があります。 –

+0

@PinnyM元の投稿を編集して、自分が行っていることを示すSQL文を追加しました。説明を明確にするため、私は一般的に私がcustomer.idを持っていると仮定します。 –

+0

デフォルト(ORMとしてActiveRecord)のレールを使用している場合、SQLをまったく書く必要はありません。私はこれをどのように書くべきかを示すために私の答えを編集しました。 – PinnyM

0

私はActiveRecordのをたくさん使用していないが、私はそれがこのことだと思う:

Store.find(customer.store_id) 
関連する問題