我有两个1:N关系的不同模型。
把它们命名为“myobject”和“related”
class Myobject < ActiveRecord::Base
has_many :related
scope :without_related, includes(:related).select{ |o| o.related.size == 0 }
end
class Related < ActiveRecord::Base
end
只要我不创建从Myobjects到Related的新工作分配,定义的作用域似乎工作得很好:
Direct rails c命令“Myobject.includes(:related).select(定义见范围)预期工程
调用作用域“Myobject.without_related”仍然返回同时分配的对象
似乎可以通过重新启动rails控制台或重新启动webrick来解决这个问题。
但我不能总是因为对象之间的关系被更改而重新启动一个webapplication;)
有什么方法可以解决这个问题或者更好地编写作用域吗?
PS:我需要这个查询作为作用域将其名称作为group_方法传递给Myobject模型形式的分组_select
最佳答案
我建议您使用counter_cache,您需要将int类型的column*related_count*添加到Myobject中,进行迁移,然后您就可以这样做了:
class Myobject < ActiveRecord::Base
has_many :related
scope :without_related, where(related_count: 0)
end
class Related < ActiveRecord::Base
belongs_to :myobject, counter_cache: true
end
之后,您将拥有超快速的作用域来获取所有没有相关记录的对象,以及该对象的计数