2013-04-10 90 views
4

我嘗試在我的Rails應用程序中使用一個是ging/mailboxer的寶石。 在寶石中,「收據」類用於模型中。 但我已經在我的應用程序中使用「Receipt」類。如何使用寶石修復重複的模型名稱

在這種情況下,模型和表名是重複的。 那麼修復重複模型名稱的最佳方法是什麼?

我認爲以下:

  • WAY1:要在創業板
  • Way2重新命名模型/表名:要在我的應用程序

我沒有重新命名模型/表名找不到任何提示Way1的提示。

如果我採用Way2,我將重命名錶名,然後在我的整個應用程序中重命名模型名。如果可能的話,我想避免這種方式,因爲我已經在很多地方使用過「收據」。

我是否必須採用Way2方法,還是有其他方法可以修復重複的模型名稱?

回答

0

正如你所說,由於它們是ActiveRecord類,它們具有相同的表,並且它們將在應用程序的命名空間中發生衝突。

您可以使用Modules來避免名稱類衝突,或者您可以更新gem或您的代碼以爲該類使用不同的名稱。

如果您選擇將您的類放入一個模塊中,對於數據庫表,您可以使用set_table_name爲該類使用不同的名稱,而不是ActiveRecord預期的默認名稱。

+0

謝謝,正如你所提到的,我以爲我把我的類放在一個模塊中,並使用set_table_name。但我必須在我的整個應用程序中將我的課程從Receipt更改爲MyApp :: Receipt。我別無選擇,只能這樣做嗎? – jwako 2013-04-10 07:49:06

+0

據我所知,沒有。你有一個寶石,一個庫,一直調用類** Foo **和你自己的代碼來調用這個類。避免類名衝突沒有一種神奇的方法,但是,您可以做的是將所有代碼(或寶石代碼)包含在模塊中,以避免類名衝突。但它仍然很多工作。 – rorra 2013-04-10 11:38:15

+0

非常感謝。我會嘗試在我的應用程序中重命名它。 – jwako 2013-04-11 08:24:28