当我将数据库查找分配给 Rails 中的实例变量时,为什么将来对该变量的请求也会访问数据库?这可以避免吗?
例如,我有 3 个模型:User、Resource、Opinion,使用 has_many :through on Opinion
@opinions = current_user.opinions # pulls in all of the user's opinions, which include respective resource ids
1、直接调用resource_id并没有命中数据库:
@opinions.each do |opinion|
opinion.resource_id # does not hit the database (as expected)
end
2. 执行查询确实会命中数据库(即使已分配变量):
@opinions.find_by_resource_id(1) # DOES hit the database
为什么#2 会命中数据库?有没有办法在不访问数据库的情况下执行相同的查找?
该信息已包含在 @opinions 变量中,因此似乎不需要进行 db 调用。