[英]Rails 4.2 will not recognize my model concerns
一個版本有什么不同! 在我的Rails 3.2應用程序中,我正在使用關注點,它們的設置如下:-- --app --models category.rb product.rb --concerns --category third_party_a.rb third_party_b.rb --product third_party_a.rb third_party_b.rb --warehouse third_party_a.rb third_party_b.rb
我擔心同一個名稱,將其命名為不同的目錄。 這是我被教如何做的方法,它比Rails 4.2默認的在關注目錄中集中一堆Ruby文件要有意義得多。 如果我有多個對象需要與多個第三方API進行交互,那么這是最好的方法。
但是,將此應用程序升級到Rails 4.2確實無法工作。 我越來越擔心,也有很多抱怨:
Unable to autoload constant Category::ThirdPartyA
它“期望文件定義它”之類的東西。 該文件如下所示:
module EbayInteraction
extend ActiveSupport::Concern
module ClassMethods
...
不,那里沒有其他名稱空間。 但是Rails 3.2並不需要它。 它完美地工作了。
所以我進入文件並將聲明更改為:
module Category::ThirdPartyA
我不知道那是否正確。 我對模塊和名稱空間感到非常困惑,這兩個概念對我來說都毫無意義。
然后,我進入模型本身,並include
如下關注點:
include Category::ThirdPartyA
而且我克服了錯誤。 然后抱怨ThirdPartyB,所以我也這樣做。 等等。
完成后,我現在收到以下投訴:
Circular dependency detected while autoloading constant Category::ThirdPartyA
這是一個愚蠢的誤導性錯誤。 這種擔心只有一種苗條的方法。 沒有任何循環的可能性。
現在我被困住了。 我唯一的選擇是重命名我的所有文件,並將它們集中到關注目錄中。 我真的不想這樣做,因為它既不可維護也不可擴展。 這里發生了什么?
我決定不浪費任何生產時間來嘗試解決4.2中的命名空間問題。 核心團隊似乎再次“改進”了一項工作慣例。
我在所有關注文件名之前都include
d的模型名稱。 並相應地更改了模塊名稱。
我將所有關注點從其模型子目錄上移至關注點 。
現在,即使它令人惡心且外觀粗糙,所有操作仍可以再次使用。 無論如何,擔憂都是愚蠢的。 只是將胖模型的東西放到另一個文件中的一種方法。 我正在移動此應用程序以使用Trailblazer的寶石和建築。 這將使我免受Rails 5中引入的任何愚蠢行為的困擾,這是我將來堅持使用該平台的唯一方法。
通過將命名空間的關注點移出concerns
目錄,我已經能夠實現這一點。
# app/models/model_one.rb
class ModelOne < ActiveRecord::Base
include Helpers
end
# app/models/model_one/helpers.rb
class ModelOne
module Helpers
extend ActiveSupport::Concern
def some_method
# do stuff
end
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.