2010-11-26 7 views
9

クッキーにアクセスして、アクションまたはコントローラーに関係なく同じ操作を実行します。ApplicationController(Rails)からクッキーにアクセスする方法

私は無数のアクションメソッドのそれぞれから呼び出されるメソッドを書く必要はありません。なぜなら、痛みではなく、非常にアジャイルなコードを作るからです。私はむしろapplication_controller.rbのApplicationControllerクラス(すべてのコントローラクラスのスーパークラス)からCookie処理メソッドを呼び出すことにします。

しかし、cookies()をApplicationControllerクラスの本体で呼び出すと、「未定義メソッド」エラーが発生します。 (cookiesは後で定義されていないと思います)

私は何ができますか?私はApplicationControllerのinitialize()メソッドを上書きし、そこから私のクッキー処理メソッドを呼び出すべきですか?もしそうなら、どのように引数をスーパーコンストラクタに渡すべきですか?

P.S.あなたのために働くかもしれない

cookies(:some_key) 

答えて

7

この:の代わりに...

cookies[:some_key] 

:私はRailsの2.3.5

2

それは、ハッシュ、ない方法だを使用してい

class ApplicationController 
    before_filter :handle_cookies 
    def handle_cookies 
    # Do whatever it is you want to do with your cookies 
    end 
end 

before_filterメソッドは、の後に指定したサブルーチン(:handle_cookies)を呼び出します。 0はハッシュにコンパイルされています。このコードをアプリケーションコントローラに追加すると、ほかのすべてのコントローラがそのコードを継承し、同じ機能を実行します。

+1

ありがとうございました。しかし実際にはハッシュを返すメソッドではありませんか? 'cookies [:key]'は 'cookies()[:key]'の略です。それにもかかわらず、解決策を見つける手助けはできますか? 「クッキー」を呼び出してハッシュを期待しても、私が以前に受けていたエラーは回避されません。 – JellicleCat

+0

これは、(Hashから継承した)CookieJarオブジェクトを返すメソッドです。クッキーデータではなくメソッドにアクセスする必要があることを正確には何をしていますか? – markquezada

+1

私はクッキーデータの後です。問題は、各アクションから呼び出さずにアクセスする方法です。 (例えば、コントローラ内のメソッドから呼び出さずに、スーパークラスからどのようにアクセスできますか?) – JellicleCat

関連する問題