2012-04-09 3 views
0

を初期化します。MyModule.rbでレール:私は、次のファイル階層を持つライブラリの衝突からロードされたモジュール内のメソッド

のLib> MyModule.rb のLib> MyModule.rb> MyClass.rb

を、私は持っていますinitializeメソッド:私は試してみて、私のクラスのインスタンスを作成するときに

def initialize(variable, parameter) 
    @variable = variable 
    @parameter = parameter 
end 

しかし、結果は誤りである:

undefined method: set is not defined for nil 

私は初期のこの再構築されたバージョンでそれを修正しようとした:

def initialize(variable, parameter) 
    @variable = variable 
    @parameter = parameter 
end 

これは私が受信したエラーを軽減。しかし、今私はHTML.erbファイルで私のクラスのインスタンスを作成するために行く:

ここ
<%= MyModule::MyClass.new("string", 1) %> 

私は、引数のエラーを取得する:0

のための2誰もがこれを説明できますか?要求されたよう

詳細情報:

私は、一般的に使用される要素のための便利なラッパーとしてhtmlタグを作成するいくつかのメソッドを作成しようとしています。特に、これらは、新しいメソッドを作成するために、railsのcontent_tagヘルパーメソッドを利用します。最終的には、単純な< <演算子を使用してネストされたタグのサポートを追加する予定です。

のLib/tags.rb

module Tags 
    include ActionView::Helpers::TagHelper 
    include ActionView::Helpers::JavaScriptHelper 
    include ActionView::Context 

    def initialize(type, content, options, &block) 
    @type = type 
    @content = content 
    @options = block_given? ? nil : options 
    @block = block_given? ? block : nil 
    end 

    def show 
    if @block.nil? 
     content_tag(@type, @content, @options) 
    else 
     content_tag(@type, @content, @options) { @block.call } 
    end 
    end 
end 

さて、これはモジュールの最低レベルです。これらは私が実装しようとしているすべてのタグに共通するものです。

を(localhostに行くときに送られているものである)私のテストファイルmain.rbで次に

module Tags 
    class DivTag 
    def initialize(content, options, &block) 
     super(:div, content, options, &block) 
    end 
    end 
end 

:私は、タグフォルダ内のクラス(のLib /タグ/ div.rb)を持っています

これが私の間違いです。

+0

これは少し不明です。定義されているクラス/モジュールが何であるか、それらが互いにどのように関係しているか、どのメソッドがどこで定義されているかを記述できますか? – tsherif

+0

私は詳細情報を追加しました –

答えて

0

「DEFタグ」 - これは間違ったアプローチで、あなたがこの方法では、「スーパー」を呼び出すには...

を クラスタグを使用する必要があります - クラスが他のクラスから継承する必要があり、例えば クラスDivTag <タグ::基本 はデフ スーパー()#<初期化 - タグ::ベース#は、すべての新しい「オブジェクト」クラスから継承するクラス、及びオブジェクト#0の引数を受け入れる初期化し、デフォルトで エンド エンド

を初期化します。

なぜ「content_tag」ヘルパー(http://apidock.com/rails/ActionView/Helpers/TagHelper/content_tag)を使用しないのですか?そのほとんどあなたが望むもの

+0

これはモジュールタグ、私の間違いではなく、 "defタグ"でなければなりません。私の間違いはここでそれを転送するが、コードではない。 スーパーはモジュールから継承しませんか? –

+0

また、私はこれらのモジュールの中でcontent_tagを使用しています。このアーキテクチャのポイントは、各タグをオブジェクトとして扱うことにより、ネストされたタグを私にとって意味のある方法で使用できるようにすることです。それ以外の場合は、content_tagsをぎこちなく入れ子にする必要があります。 さらに、これらのタグの一部は大きくカスタマイズされるため、カスタムタグごとにこれらのパラメータをすべて把握する必要はありません。私はクラス定義がこれで助けて欲しいです。 –

+0

Tags :: Divのようなモジュールの名前空間のクラスは、クラスには何も与えず、名前だけを与えます。 'ActiveSupport :: Concern'を使ってモジュールで拡張されたクラスを作ることができますが、 ' class Tags :: Div;を書く必要があります。タグを含む。 #... end' –

関連する問題