我有爸爸、妈妈和 child 模型。我的妈妈有一个名为 is_online
的 bool 属性。现在我正在做这样的分页链:
def show
@dad = Dad.find(params[:dad_id])
@kids = @dad.kids.online.paginate(:page => params[:page])
end
允许我查看仅在线的爸爸的 child 的列表。
我的模型是这样设置的:
class Kid < ActiveRecord::Base
belongs_to :dad
belongs_to :mom
scope :online, joins(:mom).where("moms.is_online = ?", true)
end
class Dad < ActiveRecord::Base
has_many :kids
end
class Mom < ActiveRecord::Base
has_many :kids
end
我遇到的问题是这不会只返回这个爸爸的 child 和在线妈妈,而是返回所有爸爸的 child 。我怎样才能使范围正确?
编辑
SELECT DISTINCT "kids"."dad_id" FROM "kids"
=> [14, 25, 27, 8, 12, 17, 28, 1, 15, 10, 26, 11, 4, 18, 30, 16, 6, 19, 29, 2, 21, 3, 23, 31, 20, 5, 13, 22, 9, 7, 24]
Kid Load (1.5ms) SELECT "kids".* FROM "kids" INNER JOIN "moms" ON "moms"."id" = "kids"."mom_id" WHERE (moms.is_online = 't')
=> #<ActiveRecord::Relation [
#<Kid id: 7, dad_id: 1, mom_id: 5, created_at: "2014-04-28 16:10:48", updated_at: "2014-04-28 16:10:48">,
#<Kid id: 21, dad_id: 2, mom_id: 5, created_at: "2014-04-28 16:10:48", updated_at: "2014-04-28 16:10:48">,
#<Kid id: 35, dad_id: 3, mom_id: 5, created_at: "2014-04-28 16:10:48", updated_at: "2014-04-28 16:10:48">,
#<Kid id: 49, dad_id: 4, mom_id: 5, created_at: "2014-04-28 16:10:48", updated_at: "2014-04-28 16:10:48">,
#<Kid id: 63, dad_id: 5, mom_id: 5, created_at: "2014-04-28 16:10:48", updated_at: "2014-04-28 16:10:48">,
#<Kid id: 77, dad_id: 6, mom_id: 5, created_at: "2014-04-28 16:10:48", updated_at: "2014-04-28 16:10:48">,
#<Kid id: 91, dad_id: 7, mom_id: 5, created_at: "2014-04-28 16:10:48", updated_at: "2014-04-28 16:10:48">,
#<Kid id: 105, dad_id: 8, mom_id: 5, created_at: "2014-04-28 16:10:48", updated_at: "2014-04-28 16:10:48">,
#<Kid id: 119, dad_id: 9, mom_id: 5, created_at: "2014-04-28 16:10:48", updated_at: "2014-04-28 16:10:48">,
#<Kid id: 133, dad_id: 10, mom_id: 5, created_at: "2014-04-28 16:10:48", updated_at: "2014-04-28 16:10:48">, ...]>
最佳答案
如下更改您的范围
:
scope :online, -> { joins(:mom).where("moms.is_online = ?", true) }
不知何故,在 Rails 4
中,您的 online
范围没有链接到由 @dad.kids
形成的查询。以上是定义 Scope in Rails 4 的正确方法
关于ruby-on-rails - 如何让Parent-Child-Parent作用域留在Parent内部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23409756/