這是很長,所以我希望你能忍受我...Rails STI Mystery - 爲什麼類型在Class中改爲String?
我有一個叫做Update的模型,有兩個子類MrUpdate和TriggeredUpdate。使用單表繼承,將類型字段添加爲更新的字符串。
在我看來,我正在檢查決定顯示哪種類型。我認爲,因爲類型爲字符串,我應該怎麼做
<% if @update.type == 'MrUpdate' %>
這種失敗,即,它評估爲假時,更新是一個MrUpdate。我注意到在這一點上,@ update.type.type是Class。 OK,什麼的,我想,所以我把它改爲:
<% if @update.type == MrUpdate %>
和它的工作,即比較評估爲真當更新是一個MrUdpate。然後,我再次降低了在我看來,它再次失敗(即,當更新是一個MrUpdate時,它評估爲false)。
原來的罪魁禍首是幾個<%= link_to ...%>我用jQuery調用按鈕。如果我把這個代碼在我看來:
<br>
<%= @update.type.type %><br>
<%= @update.type %><br>
<%= link_to 'New Note', new_note_path(:update_id => @update.id), :class => "ui-button" %>
<br>
<%= @update.type.type %><br>
<%= @update.type %><br>
我看到的是:
Class
MrUpdate
(the New Note button)
String
MrUpdate
它從一個類改變爲一個字符串!那麼,我在這裏做錯了什麼或錯過了什麼?爲什麼應該link_to做到這一點?首先,我不清楚爲什麼它不是一個字符串,但後來真的很困惑,爲什麼它會改變......?!?任何幫助或解釋都會有幫助。我可以用一種方式在頂部編碼,另一種方式在底部編碼,但這種方式的瘋狂在於。我需要明白爲什麼會發生這種情況。
你不覺得'type'是一種保留字嗎? – fl00r 2012-03-05 22:32:14
是的,它是爲此目的而保留的。讓MrUpdate和TriggeredUpdate從Update中派生並將Type字段添加到Update中,就是我如何從讀過的內容中進行單個表繼承。 – 2012-03-06 14:28:54