基于字段的关联排除
Association Exclude Based on Field
我正在寻找完成此任务的最佳 Ruby 方法。
我有一个 Person
has_many
Feeds
through
Subscriptions
。所以我们可以做 Person.feeds
之类的事情,它会获取一个人订阅的所有提要。
问题是,订阅要么被授权,要么被取消授权。使 Person.feeds
尊重 Subscription
模型上的授权 status
位的最佳方法是什么?
所以我们可以做类似 Person.feeds.where(:status => authorized)
的事情。
您可以使用如下命令调用它:
@person.feeds.joins(:subscription).where(subscriptions: { status: 'authorized' })
N.B。 joins
采用协会的格式,在本例中为单数,而 where
采用 table 名称,通常为复数形式。
这样做的顺序是:
- 加载属于
person
的 feeds
- 将这些提要加入他们的
subscription
- 仅查询
subscriptions
table 到 return 订阅有效的提要
为了重构它,我将在相关模型中包含几个方法:
# feed.rb
scope :active, -> { joins(:subscription).where(subscriptions: { status: 'authorized' }) }
# person.rb
def active_feeds
feeds.active
end
然后,您只需调用 @person.active_feeds
即可从代码库中的任何位置获取所需的结果。
(如果您希望在用户范围之外显示活动提要,Feed.active
的额外好处是可以在任何地方使用。)
希望对您有所帮助 - 如果您有任何问题,请告诉我。
我正在寻找完成此任务的最佳 Ruby 方法。
我有一个 Person
has_many
Feeds
through
Subscriptions
。所以我们可以做 Person.feeds
之类的事情,它会获取一个人订阅的所有提要。
问题是,订阅要么被授权,要么被取消授权。使 Person.feeds
尊重 Subscription
模型上的授权 status
位的最佳方法是什么?
所以我们可以做类似 Person.feeds.where(:status => authorized)
的事情。
您可以使用如下命令调用它:
@person.feeds.joins(:subscription).where(subscriptions: { status: 'authorized' })
N.B。 joins
采用协会的格式,在本例中为单数,而 where
采用 table 名称,通常为复数形式。
这样做的顺序是:
- 加载属于
person
的 - 将这些提要加入他们的
subscription
- 仅查询
subscriptions
table 到 return 订阅有效的提要
feeds
为了重构它,我将在相关模型中包含几个方法:
# feed.rb
scope :active, -> { joins(:subscription).where(subscriptions: { status: 'authorized' }) }
# person.rb
def active_feeds
feeds.active
end
然后,您只需调用 @person.active_feeds
即可从代码库中的任何位置获取所需的结果。
(如果您希望在用户范围之外显示活动提要,Feed.active
的额外好处是可以在任何地方使用。)
希望对您有所帮助 - 如果您有任何问题,请告诉我。