如何急切地加载未关联的活动模型记录

时间:2014-06-10 00:29:13

标签: ruby-on-rails activerecord ruby-on-rails-4 eager-loading

我有两个模型:HurricaneProblem,每个Hurricane有很多Problem

现在在我的数据库中,我想让用户更新有关每个Hurricane的数据,因此我有一个由管理员设置的数据副本,每个用户都可以访问这些数据。当每个用户想要更新有关Hurricane的数据时,我会创建一个admin创建记录的新副本并将其范围限定,以便每个用户只能看到他们修改过的新创建的记录。并且每个新的记录存储和原始数据都是'存储从中克隆的模型的id的属性。但是,每个问题模型仍将指向原始的飓风记录(由管理员创建)。我还应该提到每个问题都是belongs_toUser

对于给定的用户,在列出所有问题时,我想热切地加载所有相关的飓风,而不是显示他们指向的飓风,我想急切地加载那些飓风他们修改了

我试过了:

在我的app/models/problem.rb

class Problem < ActiveRecord::Base
  belongs_to :hurricane
  belongs_to :user_hurricane, -> (problem) { where "original_id = ? AND user_id = ?", problem.hurricane_id, problem.user_id }, class_name: 'Hurricane'
  ...

然后我打电话给某些人认为如下

problems = Problem.includes(:user_hurricanes).where(user_id: current_user.id)
problems.each do |problem|
  puts problem.user_hurricane
end
# >> always returns nil

但是user_hurricane总是为零,因此它不会成功地急切加载用户特定的Hurricane记录。我该怎么做?

0 个答案:

没有答案