2011-10-28 4 views
6

問題:可能な場合に複数のオブジェクトまたは複数のクエリを作成しないようにする。レールプレゼンターを使用する - 3.1で非推奨となっているメモ可能 - 代わりに|| =を使用しますか?

私は、ベストプラクティスとしてレール付きプレゼンターを使用しています。

私はいくつかの問題のために@the_record = record ||= @recordスタイルで項目を設定する上で "extend ActiveSupport.Memoizable"(そして次にそれらを使用する方法をメモするのが良い) falseまたはnilが格納されないので、クエリが再び呼び出され、memoizableはキャッシュをよりよく使用します(つまり、それを使用します)。

私はmemoizableがレール私はcarrierwave下と文でGitHubの3.1 ノートでは非推奨になっていることがわかりしかし: 「非推奨の警告:activesupportの:: Memoizableが廃止されており、将来のリリースでは削除されます、単に代わりにRubyのメモ化パターンを使用(from /Users/kain/.rvm/gems/ruby-1.9.3-preview1/bundler/gems/carrierwave-c4459179b0f8/lib/carrierwave/mount.rb:284から延長されました。

多分それはされている誰でも知っていますか?誰でも知っていますか?

|| =構文を使用しますか?上記の問題はどうですか?

enter image description here

答えて

7

||=方法は、真の評価値を返すもののために素晴らしいですが、そうでないもののために非常にうまく機能しません。 memoizeは、これらの条件をトラップし、それに応じて戻ってこれを回避します。あなたがnilに対応したい場合は、このようなアプローチを取るかもしれない:変数が定義されている場合

def some_method 
    return @some_method if (instance_variable_defined?(:"@some_method")) 

    @some_method = begin 
    ... 
    end 
end 

はこれだけチェックし、あなたのケースでは重要な違いである、設定されていない場合。

なぜ廃止予定だと思っているのか分かりません[マイケルからのメモ、3.2で廃止予定です、下記の注記を参照]。 documentationは、それが現在3.1であることを示しています。実装があるモジュールから別のモジュールに移動されても、その機能は使用できないままになっている場合、「廃止予定」とマークされることがあります。

+0

私は周りを見回しましたが、古い実装は廃止された可能性があります。とにかく私はMemoizableと一緒に行くつもりです。私は3.1 Thx tadmanに頼ることができます! –

+1

私は警告を見つけた、それは発表者とメモについての優れたレールコースである。彼らは「ゾンビのためのレール」コースとしてよく知られています。とにかく、彼らはメモ作成に関する情報を与え、ActiveSupportのオプションがどのように最善で、実際のコードチャレンジは "ActiveSupport :: Memoizable(注:ActiveSupport :: MemoizableはRails 3.1では非推奨です)"と述べました。それについてはまだ分かりませんし、上記の問題が解決されるなどの理由で推奨されなくなった場合は –

+3

3.2として廃止されました:http://guides.rubyonrails.org/3_2_release_notes.html#activesupport_deprecations – m33lky

関連する問題