来自数组的查询结果时活动记录中的错误

时间:2019-03-10 13:57:10

标签: ruby-on-rails

如果我们在控制台上这样做:

> Product.all == Product.all.to_a
true

但是,如果我们这样做:

> Product.all.to_a.where(name: "something")
!! #<NoMethodError: undefined method `where' for #<Array:0x000055b42c6a3f20>>

如果我们不运行'to_a'这个方法,那不是问题。

问题在于,在此{{3}}上,他们展示了这种使用缓存的方法:

def self.all_cached
  Rails.cache.fetch('Contact.all') { all.to_a }
end

并且从此方法返回的查询结果不能使用active_record,因为它会得到与我之前解释的相同的错误。

我的主要目标是使用缓存,并知道是否有可能通过将active_record确认作为可行的查询来解决此问题,并将其排列成阵列。

1 个答案:

答案 0 :(得分:0)

我通过以下更改解决了对缓存的查询结果使用activerecord的问题:

来自:

def self.all_cached
  Rails.cache.fetch('Contact.all') { all.to_a }
end

收件人:

   def self.all_cached
      Rails.cache.fetch("all_contacts") do
        Contact.all
      end
    end

现在它不是数组变量。

heroku article告知最佳方法是将其转换为数组后,此问题才能得到部分解决:

  

请注意,我们缓存all.to_a而不是全部。这是因为   Rails 4 Model.all延迟执行,您需要转换   使用to_a将contact.all放入一个数组中以缓存实际的   联系人。