ruby RoR ActiveRecord如何查询scopes + has_many

brjng4g3  于 11个月前  发布在  Ruby
关注(0)|答案(1)|浏览(82)

我遇到了一个Ruby on Rails的常见问题。我确实有一个嵌套的has_many关系Accounts > has_many > Sites > has_many > Pages > has_many > Blocks

class Site < ApplicationRecord
  belongs_to :account
  enum status: [:enabled, :disabled, :archived, :deleted]
end

class Account < ApplicationRecord
  has_many :sites
  enum status: [:enabled, :disabled, :archived, :deleted]
end

字符串
在这个例子中,我如何查询所有启用的站点?我可以使用Site.enabled来使用作用域。我也可以使用Account.enabled。但是我不能使用Account.enabled.sites,因为enabled作用域返回一个active_relation。在Rails中有没有一种干净的方法来实现这一点?
我目前的解决方法是Account.enabled.each(&:sites),但现在它是一个数组而不是active_relation!,所以执行Account.enabled.each(&:sites).enabled并不能正确过滤。
我查看了rails的API文档,寻找一个保留了active_relation类而不是返回数组的each

qcbq4gxm

qcbq4gxm1#

不,没有内置的方法来做你想要的事情。我会从Site端做这件事,在Site内创建一个作用域,只返回那些与enabledAccount s相关联的:

站点

scope :with_enabled_account, -> { joins(:account).merge Account.enabled }

字符串

相关问题