2016-12-04 46 views
0

我想编写一个显示是 "Management Group""Event Management Group"利用协会书面方式范围连接 - 轨道4

内,可能有请告知我这是怎么写的用户范围。

我可以用书面方式下面范围成功地显示在“管理组”用户:

user.rb 

scope :hosts, ->() { joins(:category_managementgroup).where('category_managementgroups.name' => "Management Group") } 

如何将我写的显示在这两个“管理 组”用户和“范围事件管理小组”

我试过以下,但不工作:

scope :hosts, ->() { joins(:category_managementgroup).where('category_managementgroups.name' => "Event Management Group") && joins(:category_managementgroup).where('category_managementgroups.name' => "Management Group") } 

我也试过以下,但没有运气:

scope :hosts, ->() { joins(:category_managementgroup).where('category_managementgroups.name ? OR', "Event Management Group", "Management Group") } 

你的帮助会非常赞赏

回答

1

尝试使用IN

scope :hosts, -> { joins(:category_managementgroup).where("category_managementgroups.name IN (?)", ["Management Group", "Event Management Group"]) } 

希望帮助!

+1

非常感谢你!非常感激! – ARTLoe

2

只需正确使用ActiveRecord的语法,你会得到你期待什么

scope :hosts, -> { 
    joins(:category_managementgroup) 
    .where(category_managementgroups: { name: ["Event Management Group", "Management Group"] }) 
} 

此范围将为您提供Event Management GroupManagement Group中的用户。

+1

@ARTLoe此查询将产生查询。其轨道方式做到这一点 –

1

也许这可以工作:

scope :hosts, ->() { joins(:category_managementgroup).where('category_managementgroups.name' => "Event Management Group").joins(:category_managementgroup).where('category_managementgroups.name' => "Management Group") } 
1

你应该改掉你的其他范围

User.rb

scope :hosts_in_any_management, -> { joins(:category_managementgroup).merge(CategoryMangagementgroup.in_management)} 

scope :hosts_in_both_management_groups, -> { joins(:category_managementgroup).merge(CategoryMangagementgroup.both_management_groups) } 

CategoryManagementgroup.rb

scope :in_management, -> { management_group.or(CategoryManagementgroup.event_management_group) } 

scope :both_management_groups, -> { event_management_group.management_group } 

scope :event_management_group, -> { where name: 'Event Management Group'} 
scope :management_group, -> { where name: 'Management Group' }