RoR ActiveRecord 如何查询范围+ has_many

问题描述 投票:0回答:1

我面临着 Ruby on Rails 的常见问题。我确实有嵌套的

has_many
关系 帐户 > has_many > 站点 > has_many > 页面 > has_many > 块

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 文档,寻找一个

each
,它保留了 active_relation 类而不是返回数组。

ruby-on-rails ruby activerecord
1个回答
0
投票

不,没有内置的方法可以做你想做的事。我会从

Site
一侧执行此操作,方法是在
Site
内创建一个范围,该范围仅返回那些具有关联的
enabled
Account
s:

网站

  scope :with_enabled_account, -> { joins(:account).merge Account.enabled }
© www.soinside.com 2019 - 2024. All rights reserved.