簡體   English   中英

Rails 4.2無法識別我的模型問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM