2017-08-21 42 views
0

拉特说,我有一些关系:避免ActiveRecord的关系在Rails中被重新加载

@active_posts = Post.where(active: true).limit(3) # returns 3 active posts, but there are much more then 3 

然后我修改了一些这种关系的成员:

@active_posts.first.update active: false 
@active_posts.size # returns 3, but need 2 remaining 

我如何能得到休息2个活动这个关系中的职位?当我尝试迭代@active_posts时,它将从db重新加载,并用活动的替换已停用的帖子。但是我怎么能从这个关系中确切地看到2个活跃的帖子,在关闭第三个帖子后仍然存在?

回答

0

使用范围

class Post < ActiveRecord::Base 
    scope :actived, -> { where(active: true) } 
    scope :deactived, -> { where(active: false) } 
end 

@active_posts = Post.actived # returns 3 active posts 
@active_posts.first.update active: false 
@active_posts.reload 
@active_posts = Post.actived 
+0

这不是个例。因为最后的语句再次返回3个激活的帖子(db有3个以上的活跃帖子,我应该修复我的示例 – Molfar

+1

update statement后的add @ active_posts.reload –

+0

@Molfar不幸的是Rails并不那么聪明,重新加载并始终使用范围。 –

相关问题