建议与动态条件的热切加载关联

时间:2011-12-08 13:29:42

标签: ruby-on-rails ruby-on-rails-3

Rails 3.1。目前我的关联动态条件取决于国家/地区。

class Article
  has_many :comments, :conditions => Proc.new { { :country => Comment.country } } 
end

Comment.country = "US"

# Eager loads comments from the US
Article.includes(:comments).all 

正如您所看到的,我正在设置一个类属性标记Comment.country,以告诉Article国家/地区需要在急切加载它们时需要的文章。它有效,但我担心竞争条件,因为Comment.country之类的内容将在所有用户会话中共享。有人可以建议我更好的方法吗?

更新: 更具体地说,我希望加载我的关联以使我的SQL查询保持在最低限度。此外,在做类似

的事情时
@article.comments

它将根据条件提取已经急切加载的评论。我不想做像

这样的事情
@article.comments.where(:country => "US")

因为不仅是SQL查询更多,调用@article.comments 指的是同一个评论集合。

1 个答案:

答案 0 :(得分:0)

你需要以关系的方式思考,你希望你的sql看起来像什么?您是否只是想减少加载国家/地区代码的查询数量?

另外,请记住,延迟加载有时可能与加载时一样快,具体取决于从数据库返回的数据量。