rails scope使用" AND"

时间:2018-01-06 21:10:54

标签: ruby-on-rails ruby-on-rails-5

我有两个范围,在搜索框中使用by_group_title来返回基于用户搜索的组名。它工作正常,但是,我试图限制搜索结果中可以返回的组。具体来说,我试图排除任何拥有"会员资格的群体。 "受限制",我只希望在"会员资格"设置为"标准"为小组。

我的第二个范围叫做by_standard_membership。此范围将返回标准组,但不允许搜索。因此,我试图找到一种方法来组合两个范围,以便用户可以搜索组标题,但只显示标准组,并且限制组不会出现在搜索结果中。

我一直在使用"和"结合它们的声明,但似乎无法使它发挥作用。

#scopes
scope :by_group_title, -> (group) { where('title LIKE ?',"%#{group}%" ).order(created_at: :desc) if group.present? }
scope :by_standard_membership, -> { where(membership: "Standard").order(created_at: :desc) }

1 个答案:

答案 0 :(得分:2)

有几种方法可以做到这一点。在下面的示例中,我已将条件(AND)someNum = 1添加到您提供的表达式中。

您可以将AND添加到where子句...

scope :by_group_title, -> (group) { where('title LIKE ? and someNum = 1',"%#{group}%" ).order(created_at: :desc) if group.present? }

或使用ActiveRecord字段......

scope :by_standard_membership, -> { where(membership: "Standard", someNum: 1).order(created_at: :desc) }

或者,您可以将where子句链接在一起......

scope :by_standard_membership, -> { where(membership: "Standard").where(someNum: 1).order(created_at: :desc) }