Ruby on rails 如何基于多个条件定义多个范围?

Ruby on rails 如何基于多个条件定义多个范围?,ruby-on-rails,Ruby On Rails,我有一个和许多关联,我只希望提取ID为特定值的关联记录,并且只有一个条件为真 例如: class Account has_many :issues has_many :nodes, through: :issues end 因此,基本上,如果帐户是试用帐户,那么issue.nodes只会返回4条记录。我只会在发布时使用不同的方法: 类问题 ... 定义有效节点或可见节点等 如果账户。试用账户? 节点 其他的 节点。限制(4)#或您的静态节点 结束 结束 您可以为关联定义提供某种la

我有一个
和许多
关联,我只希望提取ID为特定值的关联记录,并且只有一个条件为真

例如:

class Account
   has_many :issues
   has_many :nodes, through: :issues
end

因此,基本上,如果帐户是试用帐户,那么
issue.nodes
只会返回4条记录。

我只会在发布时使用不同的方法:

类问题
...
定义有效节点或可见节点等
如果账户。试用账户?
节点
其他的
节点。限制(4)#或您的静态节点
结束
结束

您可以为关联定义提供某种lambda。 大概是这样的:

有许多节点,->(问题)do
其中(账户id:[1,2,3,5]),如果是issue.account.trial\u账户
结束
我不确定我是否正确理解了这个问题,但从代码库中我看到该节点属于account AND issue

使用我的示例中的这个代码块将返回属于请求问题和属于id为1、2、3或5的帐户的节点


如果您需要获取任何只属于id为1、2、3或5的account的节点,我认为更好的方法是使用@stwienert解决方案,定义一个返回正确节点的方法。

如果self.account.trial\u account
为false,应该怎么办?关联不应该只在这些ID上吗?如果条件为false,它应该包括所有。
class Issue
   belongs_to :account
   has_many :nodes, dependent: :destroy, # where node.account_id == [1,2,3,5] if self.account.trial_account
end
class Node
   belongs_to :account
   belongs_to :issue
end