2013-07-23 6 views
5

"root_path"のようなルートヘルパーをmy_model.rbのようなクラスにクラスメソッドとして追加するにはどうすればよいですか?クラスヘルパーをクラスメソッドとして追加する

だから私のクラスでは、このようなものです:クラスに、mymodelは

をのroot_pathに応答しませんので、これは私が知っているものである上記

Class MyModel 

    def self.foo 
    return self.root_path 
    end 

end 

MyModel.foo 

動作しません:

  1. 私はRails.application.routes.url_helpersを含めることができますが、モジュールメソッドをインスタンスメソッドとして追加するだけです
  2. 私は拡張をやってみましたRails.application.routes.url_helpersしかし、それは

は学校へお気軽にしてください動作しませんでしたが、私:)

+0

これは、MVCの間違ったアプローチです。アプリケーションのコントローラまたはヘルパーレベルでルート関連のメソッドを追加する必要があります。 –

+0

http://stackoverflow.com/questions/341143/can-rails-routing-helpers-i-e-mymodel-pathmodel-be-used-in-modelsの重複 –

+0

どのように重複していますか?インスタンスメソッドとして追加しています。私はそれをクラスメソッドとして追加したい。そして、それは私の質問:モジュールメソッドをクラスメソッドとして追加する方法 – user566245

答えて

12

URLルートは、一般的にモデルからアクセスする必要はありません。通常は、リクエストを処理するときやビューをレンダリングするとき(コントローラのリンクURLの書式設定など)にコントローラからアクセスする必要があります。

モデルオブジェクトにルートパスを尋ねる代わりに、コントローラまたはビュー内からroot_pathを呼び出すだけです。

編集

あなたがあなたのクラスのクラスメソッドとしてモジュールのメソッドを含めることができません理由で、単に興味があるなら、私はinclude簡単な動作するように期待していない、それが出来クラスのメソッドのようなモジュールのメソッドを含めます。

extendは正常に動作しますが、この場合はurl_helpersメソッドが実装されているために発生しません。 actionpack/lib/action_dispatch/routing/route_set.rbソース

def url_helpers 
    @url_helpers ||= begin 
    routes = self 

    helpers = Module.new do 
... 
     included do 
     routes.install_helpers(self) 
     singleton_class.send(:redefine_method, :_routes) { routes } 
     end 

からroutes.install_helpers(self)コールを含むincludedブロックを使用すると、メソッドが(そうextendが出ている)をインストール得るためにincludeにモジュールを必要とすることを示しています。

extendをクラスのコンテキストで呼び出す場合は、以下が有効です。これを試してみてください:

Class MyModel 
    class << self 
    include Rails.application.routes.url_helpers 
    end 
end 
Class.root_path 
+0

よく私はあなたのポイントを理解するが、それは私の質問ではない。私はモジュールのインスタンスメソッドをクラスメソッドとして追加する方法を尋ねています。私は拡張がうまくいくことを知っていますが、私が言及した場合には機能しません。なぜなのかご存知ですか? – user566245

+0

@ user566245Gotcha。私は私の答えを更新しました。もう一度見てください –

+0

@ user566245これはあなたのために機能しましたか?試してupvote /それがうまくいけば、答えを受け入れてください、ありがとう! –

関連する問題