2

シンプルな「設定」モデルを設定して、アプリ全体で使用できるユーザーが変更可能なグローバルを作成できるようにしました。このモデルにはvar_namevalue列があります。はvar_name主キーです。

を使用してこれらにアクセスできますSetting.find('my_variable_name')が、これは機能しますが、毎回データベースクエリが発生します。

毎回データベースにクエリを実行するのではなく、設定を1回「キャッシュ」できるようにしたいと思います。
これを実行する正しい方法がわかりません。Railsはまだ初めてです。

settings = Setting.allアプリケーションコントローラーのように、すべての設定を変数に入れてから、その変数から1つの変数を操作する方法を作成することを想像します。次のようなものを使用して呼び出しsettings.my_variable_nameます......
しかし、方法はわかりません:)

何かアドバイスをいただければ幸いです。ありがとう。

4

1 に答える 1

4

これを設定モデルに追加してみてください。

class Setting < ActiveRecord::Base
  def self.fetch(name)
    fetch_all.detect { |s| s.var_name == name }
  end

  def self.fetch_all
    @fetch_all ||= Setting.all
  end

  def self.reload_all!
    @fetch_all = Setting.all
  end
end

いくつかの設定を作成し、

Setting.create(var_name: 'domain', value: 'google.com')
Setting.create(var_name: 'subdomain', value: 'www')

次に、を使用して設定をフェッチできますSetting.fetch('domain').value #=> 'google.com'

Settings.fetch('domain')    #=> Hits the database with Settings.all
Settings.fetch('subdomain') #=> Hits the results in @fetch_all
Settings.fetch('domain')    #=> Hits the results in @fetch_all

@fetch_all ||= allSetting.all最初にSetting.fetch_all呼び出され、結果がに保存され@fetch_allます。以降の呼び出しでは、に保存されている結果が使用され@fetch_allます。

于 2013-03-10T00:41:53.130 に答える