2016-07-29 7 views
0

ビューに表示するためにデータをソートする際に使用するモジュールがあります。ターミナルでは、私はこれはエラーNoMethodError: undefined method '<<' for nil:NilClassにつながるこの引数を渡す際のNilClassエラー

> include BeforeOrAfter 
> s = s.Artist.find(1) 
> s.events.each do |event| 
> before_or_after(event) 
> end 

のようなモジュールを試してみてください。

module BeforeOrAfter 
    attr_reader :past 
    attr_reader :future 

    require "date" 
    def initialize 
    @datetime = DateTime.new 
    @future = [] 
    @past = [] 
    end 

    def before_or_after(event) 
    if event.date < DateTime.now 
     @past << event.id 
    else 
     @future << event.id 
    end 
    end 
end 

EDIT: はここに私のモジュールであるコンソールに周りの多くの演奏と、これを試みたが、それが動作します。今では、処理するモジュールにすべてを渡すときにこれがなぜ機能しないのですか?

> include BeforeOrAfter 
> s = s.Artist.find(1) 
> @f = [] 
> @p = [] 
> s.events.each do |event| 
> if event.date < DateTime.now 
> @p << event.id 
> else 
>  @f << event.id 
> end 
> end 
> @f 
    => [17] 

答えて

0

私はそれを行うだろうattr_reader :pastattr_accessor :pastに変更を想像します。

+0

まだ同じエラー – sivanes

+0

あなたがここに持っているベースの実装は、IRBで私にとってうまくいくようです。私はそれをオブジェクトに組み込み、日付属性が定義されたOpenStructにフィードし、エラーをスローしません。だからええ、私の最初の答えはおそらく間違っているでしょう:) OpenStructのobj.before_or_afterに日付が定義されていない状態でフィードしたとき、 'NoMethodError:未定義のメソッド' <'for nil:NilClass'エラーが返されました。私はあなたがあなたのエラーを「<<」を持っていると報告していることを認識しています。これは同じ問題ではないことを二重チェックするだけです。そうであれば、イベントオブジェクトをチェックし、日付属性を持っているかどうか確認することができます。 – josh

+0

'.date'を取り出して' event sivanes

1

initializeメソッドが呼び出されることはありません。ルビのトップレベルのオブジェクトにモジュールを含めています - 初期化はすでに呼び出されています。

あなたがより多くの「普通」クラスでそれを含めていた場合、あなたがコントロールしていない他のクラスに含めた場合、すなわち

class Foo 
    include BeforeOrAfter 
end 

before_or_after方法はFooの

のインスタンス上で動作するはずですが、あなたはそのクラスが独自のinitailizeメソッドを定義している可能性があるため、初期化が呼び出されることを保証できません。あなたのinitializeが最初に呼び出されるようにインクルードする代わりにprependモジュールを使うことができます。これを行う場合は、依然としてオリジナルのinitializesuper)を呼び出し、initializeは元のものと同じ引数を取ることを確認してください。

私はおそらく2つのインスタンス変数を初期化にフックしようとするのではなく、必要なときに初期化します。

+0

にいくつかの情報を追加しました。現在私が必要としているすべてのコントローラが必要なため、application_controllerに追加しました。 – sivanes

+0

OK、どこでprependとcall superを使う必要がありますか? – sivanes

関連する問題