如何构造查询来检查关系是否存在

Mar*_*enn 0 ruby-on-rails ruby-on-rails-5

我正在构建一个Rails 5应用程序。在这个应用程序中,我得到了一个用户模型和一个订阅模型。我希望能够获得所有拥有有效订阅的用户。

用户

has_one:订阅

- id,
- name
- email
Run Code Online (Sandbox Code Playgroud)

订阅

当属:用户

- id
- user_id
- title
- active (boolean)
Run Code Online (Sandbox Code Playgroud)

我需要能够进行如下查询(如下)。换句话说,我需要找到所有不仅获得订阅而且还将active属性设置为true的用户。

User.with_active_subscriptions
Run Code Online (Sandbox Code Playgroud)

我想我可能需要做一个示波器,但不知道如何做。

小智 5

我建议您先在Subscription模型中编写一个作用域:

scope :active, ->{ where(active: true) }
Run Code Online (Sandbox Code Playgroud)

然后,您可以在用户类中使用上述范围。

scope : with_active_subscriptions, ->{ joins(:subscription).merge(Subscription.active) }
Run Code Online (Sandbox Code Playgroud)

我更喜欢这种编写代码的方式,因为它activeSubscription类的属性。用户类不必关心这一点。这样,您的代码将得到更好的结构,并且如果您需要更改活动范围的功能,则只需在一个地方完成即可。