2016-05-29 8 views
1

モデルに特有の機能のサブセットに関する懸念を分離することを検討しています。 私はそれが一定のModelNameを自動ロードしながら、検出された次のエラーモデル名に基づいた名前空間のネームスペース

循環依存につながるサーバーを起動しようとすると、私は、hereを参照し、しかし、このパターン

module ModelName::ConcernName 
    extend ActiveSupport::Concern 

    included do 
    # class macros 
    end 

    # instance methods 
    def some_instance_method 

    end 

    module ClassMethods 
    # class methods here, self included 
    end 
end 

に従っている:: ConcernName

私は、モデルの一部のサブセット関数について懸念を抱く最善の方法が何であるか疑問に思っています。

編集

モデルコードの提供: パス:アプリ/モデル/ rent.rb

を今私は私のモデルのロジックをチェックするのがたくさんある

class Rent < ActiveRecord::Base 
    def pricing_ready? 
     # check if pricing is ready 
    end 

    def photos_ready? 
     # check if photo is ready 
    end 

    def availability_ready? 
     # check if availability setting is ready 
    end 

    def features_ready? 
     # check if features are set 
    end 
end 

私が欲しいですそれを分離するために

class Rent < ActiveRecord::Base 
    include Rent::Readiness 
end 

と名前空間 パスで懸念を整理する:私はちょうどapp/models/concerns/rent_readiness.rb

答えて

3

Railsの中のパスを持つクラスRentReadinessをすればアプリ/モデル/懸念/賃貸/ readiness.rb

module Rent::Readiness 
    extend ActiveSupport::Concern 

    included do 
    # class macros 
    end 

    # instance methods 
    def pricing_ready? 
    # check if pricing is ready 
    end 

    ... 

    module ClassMethods 
    # class methods here, self included 
    end 
end 

は今、私はそれが働いてしまいましたクラスやモジュール名に基づいてファイルパスを推測してクラスやモジュールをロードするためにactivesupportを使用します。これは、Rubyパーサーがファイルをロードし、まだロードされていない新しい定数を渡すときに行われます。あなたのケースでは、RentモデルはRent::Readlinesの参照まで解析され、その時点でアクティブサポートがオフになり、名前に一致するrent/readlines.rbコードファイルが検索されます。このファイルはrubyで解析されますが、最初の行でまだ読み込まれていないRentクラスが参照され、activesupportが実行され、名前に一致するコードファイルが検索されます。

+0

どのようにこの問題に取り組むべきですか? –

+1

最初に、Railsの懸念パターンは、あらゆる懸念がどのモデルでも利用できるように設計されています。これを達成するためのreadlinesの懸案事項を更新することで、最初に名前空間を指定する必要がなくなります。それ以外の場合、これが本当にRentモデルにのみ関連するロジックであれば、私はおそらく/ libに移動してRentReadlinesという名前に変更します(それでも構文拡張を使用することができます) – maniacalrobot

+0

移動の理由それはlibに? –

関連する問題