2011-04-08 75 views
3

爲什麼是它軌多態查詢

@discussions = Discussion.where(:discussable => @discussable) 

不起作用。但這項工作:

@discussions = Discussion.where(:discussable_id => @discussable.id, :discussable_type => @discussable.class.to_s) 

謝謝。

回答

1

因爲在第一個中傳遞了一個完整的模型實例。該屬性必須是一個id(整數),並傳遞一個對象。第二個是好的,因爲你傳遞了id(正確)。

+3

我想軌釋放比聰明我猜這裏的方法比查找更嚴格,謝謝! – randomor 2011-04-08 02:23:54

+0

實際上有一個原因,傳遞一個對象可以通過序列化來完成,這就是爲什麼一個整數必須是一個整數:) – Spyros 2011-04-08 02:26:06

+0

當你有這個時候,這是相當尷尬和呆滯的在每次查詢po時指定_id和_type形態聯想。我雖然Rails可以更聰明,並檢測到這種情況。 – 2012-10-23 13:40:53