我正在寻找最好的Ruby方法来实现这一目标。
我有一个Person
has_many
Feeds
through
Subscriptions
。因此,我们可以执行Person.feeds
之类的操作,并获取一个人订阅的所有Feed。
问题是,订阅被授权或被授权。让Person.feeds
尊重status
模型上的授权Subscription
位的最佳方法是什么?
所以我们可以做Person.feeds.where(:status => authorized)
之类的事情。
答案 0 :(得分:1)
您可以使用以下命令调用此方法:
@person.feeds.joins(:subscription).where(subscriptions: { status: 'authorized' })
N.B。 joins
采用关联的格式,在这种情况下是单数,而where
采用表名,通常是复数。
这样做的顺序是:
feeds
person
subscription
subscriptions
表以仅返回订阅处于活动状态的供稿为了重构这一点,我在相关模型中包含了几种方法:
# feed.rb
scope :active, -> { joins(:subscription).where(subscriptions: { status: 'authorized' }) }
# person.rb
def active_feeds
feeds.active
end
然后,您只需致电@person.active_feeds
即可从代码库中的任何位置获取所需的结果。
(如果您希望在用户范围之外显示活动供稿,还可以在任何地方使用Feed.active
的额外奖励。)
希望有所帮助 - 如果您有任何问题,请告诉我。