ruby-on-rails - Rails - 两个查询在没有 SCOPES 的情况下组合它们

标签 ruby-on-rails ruby-on-rails-3

给定两个查询:

@users1 = Users.find_by_company_id(2)
@users2 = Users.find_by_office_id(2)

我想把两者结合起来:

@users_to_show = @users1 + @users2

问题是如何防止重复用户显示。有没有办法将两者(数组?)结合起来,然后确保删除重复记录?

谢谢

更新:

# This QUERY gives all of a user's project members, people they work with
@project_ids = @projects.map(&:project_id)

@users = User.find_by_sql [
                            "SELECT DISTINCT users.*
                            FROM users 
                              INNER JOIN permissions ON permissions.user_id = users.id 
                            WHERE project_id IN (?) AND permissions.user_id != ?
                            UNION ALL
                            SELECT DISTINCT users.*
                            FROM users
                            WHERE instance_id = ?",
                            @project_ids, current_user.id, current_user.instance_id
                          ]

最佳答案

这是一种可能适合您的手动 SQL 方法:

@users = User.find_by_sql("
     SELECT DISTINCT * FROM USERS WHERE [Place your First complicated where clauses Here]
     UNION
     SELECT * FROM USERS WHERE instance_id = ?
", current_user.instance_id)

编辑: UNION 将消除两个查询之间的重复记录。

编辑:确保每个查询都不会独立产生重复项。 Union 不会删除单个查询中的重复项。

关于ruby-on-rails - Rails - 两个查询在没有 SCOPES 的情况下组合它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4766549/

相关文章:

ruby-on-rails-3 - has_many 通过构建

ruby-on-rails - 在Docker内部调试Rails应用程序使用Intellij/Rubymine

ruby-on-rails - Activerecord 返回匹配数组中所有属性的对象

ruby-on-rails-3 - 试图让 Selenium 在 Rails 3 中工作 - "WebMock::NetConnectNotAllowedError"

ruby-on-rails-3 - 在 Rails 3.1 项目中使用 RSpec 时出现 "Uninitialized constant"错误

ruby-on-rails-3 - rspec 应该包括尝试 chomp 数组

ruby-on-rails - capybara Webkit 引发 InvalidResponseError "Unable to load URL"

ruby-on-rails - 如何记住 Rails 中的类方法?

mysql - Rails 关联使用 'model' .'model_id' 而不是 'model' .'id' 触发 SQL where 子句

ruby-on-rails - 插件中的生成器和迁移 (rails 3)