2010-04-01 41 views
3

我有一個Post類和一個Comment類。我有一個帖子對象,並希望將其轉換爲Comment對象。我經歷了Rails api,發現變成了(klass)。現在,發佈和評論之間沒有關聯。所以我試了如何使用成爲導軌

@post.becomes(Comment) 

但是變成@post對象的方法找不到。我錯過了什麼嗎?

回答

0

我假設你說的是從ActiveRecord :: Base派生的類。在這種情況下,我認爲你有兩個選擇,如果你真的想轉換的職位爲註釋(這似乎有點怪我):

  • 你可以用它標記屬性只有一個類別(例如輸入)它可以作爲文章或評論,您可以根據需要設置
  • 您可以創建並保存包含帖子對象文本的新評論對象,然後刪除帖子對象。
+0

。我爲一些類和一些其他類對象定義了訪問該方法所需的方法。我也可以把它包含在一個共同的幫手中,但是我遇到了這個問題,並且按照我的想法解決了這個問題。所以想知道它是如何工作的。 – 2010-04-01 06:27:10

+2

好吧,在這種情況下,我認爲'成爲'工作崗位必須繼承評論。正如文檔中所說的,當你希望子類的一個實例作爲超類的一個實例出現時,'become'就很有用。 – 2010-04-01 07:03:09

+0

晚會的方式,但(至少)4.2ish,'成爲'可以在兩個不相關的對象之間工作。不要以任何方式提出建議,只要說明它行得通。 – 2017-10-17 00:25:44

3

把你希望這兩個模型在模塊上使用的方法。然後在兩種模型中包含該模塊。

+0

謝謝。解決方案是正確的。接受上面的答案,因爲我得到了一些準確的解釋使用成爲。 :)。爲延誤道歉! – 2011-01-17 09:52:20

3

請注意,變爲返回一個新的對象,但不會修改現有的對象。你需要自己做分配

@post = @post.becomes(Comment) 

見我試圖強制轉換對象的文檔ActiveRecord::Persistence#becomes