2012-01-12 28 views
0

我正在嘗試根據父項表中的項檢索子對象。例如,我有Customer類,其中包含Stores表的「store_id」鍵。如果客戶有一個「store_id」鍵,我想將這個Store對象而不是父對象Customer帶回來。紅寶石,通過鍵檢索子對象

編輯:這是一個sql語句顯示我正在嘗試做什麼。

所以SQL語句看起來像這樣。

「選擇存儲。* FROM客戶INNER JOIN店ON customers.store_id = storeS.id WHERE customers.id = '9'」

我知道SQL可能是錯的,但那是一個非常簡潔的方式來展示下。

+0

你說的「帶回來」呢?你能向我們展示一些你想要做的事情的示例代碼嗎? – Mischa 2012-01-12 03:35:11

+0

@Mischa所以SQL語句看起來像這樣。 – 2012-01-12 12:48:02

+0

如果這就是你想要的,你應該遵循PinnyM的回答。 – Mischa 2012-01-12 13:03:40

回答

5

我假設你正在使用rails的開箱即用配置(使用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'工作,您需要''customer'模型中定義的'belongs_to:store'。 – 2012-01-12 07:57:28

+0

@PinnyM我編輯了原始帖子,包含一個sql語句來顯示我正在做什麼。澄清,我通常只假設我有一個customer.id。 – 2012-01-12 12:55:55

+0

如果您使用的是具有默認值的Rails(ActiveRecord作爲ORM),則根本不需要編寫任何SQL。我編輯了我的答案,以表明這是如何寫成的。 – PinnyM 2012-01-12 14:41:49

0

我不使用ActiveRecord了很多,但我認爲這是這樣的:

Store.find(customer.store_id)