我遇到了一个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
。
1条答案
按热度按时间qcbq4gxm1#
不,没有内置的方法来做你想要的事情。我会从
Site
端做这件事,在Site
内创建一个作用域,只返回那些与enabled
Account
s相关联的:站点
字符串