【发布时间】:2012-09-28 17:24:30
【问题描述】:
当我将数据库查找分配给 Rails 中的实例变量时,为什么以后对该变量的请求也会访问数据库?可以避免吗?
例如,我有 3 个模型:User、Resource、Opinion,with 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 变量中,因此似乎不需要调用数据库。
【问题讨论】:
-
您在#2 中实际上想要做什么?您是否尝试从具有特定 ID 的集合中提取意见?
-
jstim:是的,这就是我想做的。我正在遍历 Resource 模型的一个子集,并希望显示用户对每个模型的意见。
标签: ruby-on-rails-3 activerecord instance-variables