1

私が走るとき:

IpPermission.blacklist.pluck(:ip)

結果が得られます:

=> ["127.0.0.11012q", "50.36.46.48"] 

ip_permissionsテーブルの行のいずれかを手動で変更して、IpPermission.blacklist.pluck(:ip)再度実行した場合。更新された結果が表示されます。データベースから直接ではなく、キャッシュから結果をロードするべきではありませんか?

私のモデルは次のようになります。

class IpPermission < ActiveRecord::Base
  validates_presence_of :ip, :note, :category
  validates_uniqueness_of :ip, :scope => [:category]
  validates :category, :inclusion => { :in => ['whitelist', 'blacklist'] }

  def self.whitelist
    Rails.cache.fetch('whitelist', :expires_in => 1.month) { self.where(:category => 'whitelist') }
  end

  def self.blacklist
    Rails.cache.fetch('blacklist', :expires_in => 1.month) { self.where(:category => 'blacklist') }
  end
end
4

1 に答える 1

3

これで問題は解決すると思います:

これを変える

  def self.whitelist
    Rails.cache.fetch('whitelist', :expires_in => 1.month) { self.where(:category => 'whitelist') }
  end

  def self.blacklist
    Rails.cache.fetch('blacklist', :expires_in => 1.month) { self.where(:category => 'blacklist') }
  end

これに

  def self.whitelist
    Rails.cache.fetch('whitelist', :expires_in => 1.month) { self.where(:category => 'whitelist').all }
  end

  def self.blacklist
    Rails.cache.fetch('blacklist', :expires_in => 1.month) { self.where(:category => 'blacklist').all }
  end

where は実際のクエリを作成しません。配置.allすると、クエリを作成するため、データを保存するのではなく、クエリを保存するだけです

于 2012-11-09T09:58:23.440 に答える