【问题标题】:Cache Model array with attr_accessor?使用 attr_accessor 缓存模型数组?
【发布时间】:2012-01-23 14:14:08
【问题描述】:

当我将 attr_accessor 添加到我的模型中,而数据库中没有该列时,我可以将临时数据添加到类对象数组中。

我的例子:

class User < ActiveRecord::Base
  attr_accessor :score
end

但问题是,如果在 memcache 中缓存一个带有分数的用户数组,则该数组来自:

[< User >, < User >, < User >]

到:

[< User >, :@score, 100, < User >, :@score, 200, < User >, :@score, 300]

有没有办法在不破坏数组的情况下缓存这些信息?

编辑:根据要求,将数据放入缓存的实际代码:

  def users_scoreboard
    Rails.cache.fetch("special_scoreboard_#{self.cache_key}", :expires_in => 1.hour) do
      users = Photo.missions(self.missions).created(self.start_at, self.end_at).map(&:user).uniq!
      users = [] if users.nil?
      users.each do |u|
        u.score = u.score_for_special(self)
      end
      users.sort! { |a,b| b.score <=> a.score }
    end
  end

编辑:我正在使用什么:

ruby -v
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.0.1]

rails -v
Rails 3.2.0

memcached -i
memcached 1.4.5

memcached -i
memcached 1.4.5

gem -v dalli
1.8.8

但问题出现在 Memcache 或文件存储上。

感谢您的帮助!

【问题讨论】:

  • 向我们展示将数组放入内存缓存的代码。
  • 我刚刚更新了问题:)
  • 我无法重现。我在 rails 3.2、memcache-client 1.8.5、memcached 1.4.7 和 users_scoreboard 总是为我返回一个 Users 数组。
  • 是的,即使使用 Rails 3.0 和 Dalli 使用 memcached 1.4.4,它似乎也能正常工作。是否有一些您没有包含的代码?
  • 当然肯定有,但它超出了这些行的范围,所以它可能是我的用户模型定义中的一些东西的一个奇怪的宝石。我现在最终使用带有 ids 和 score 的简单哈希。

标签: ruby-on-rails ruby caching attr-accessor


【解决方案1】:

尝试使用 cattr_accessor,它也会将访问器方法添加到类中。这对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 2011-04-12
    • 2015-05-25
    • 2016-09-04
    • 2017-01-20
    • 1970-01-01
    相关资源
    最近更新 更多