ruby-on-rails-3 - 导轨 : join with multiple conditions

标签 ruby-on-rails-3 activerecord join

我有一个简单的模型,比如

class Interest < ActiveRecord::Base
  has_and_belongs_to_many :user_profiles
end

class UserProfile < ActiveRecord::Base
  has_and_belongs_to_many :interests
end

当我想查询具有特定兴趣的所有用户时,这很简单
UserProfile.joins(:interests).where('interests.id = ?', an_interest)

但是我怎样才能找到有多种兴趣的用户呢?当然,如果我这样做
UserProfile.joins(:interests).where('interests.id = ?', an_interest).where('interests.id = ?', another_interest)

我总是得到一个空的结果,因为在加入之后,没有行可以同时具有interest.id = an_interest 和interest.id = another_interest。

ActiveRecord 中是否有一种方法可以表达“我想要具有 2 个(指定)相关兴趣的用户列表?

更新(解决方案)这是我提出的第一个工作版本,感谢 Omar Qureshi
    specified_interests.each_with_index do |i, idx|
      main_join_clause = "interests_#{idx}.user_profile_id = user_profiles.id"
      join_clause = sanitize_sql_array ["inner join interests_user_profiles interests_#{idx} on
                    (#{main_join_clause} and interests_#{idx}.interest_id = ?)", i]

      relation = relation.joins(join_clause)
    end

最佳答案

in (?) 不好 - 它是一个类似 OR 的表达式

您需要做的是手写多个连接

profiles = UserProfile
interest_ids.each_with_index do |i, idx|
  main_join_clause = "interests_#{idx}.user_profile_id = user_profiles.id"
  join_clause = sanitize_sql_array ["inner join interests interests_#{idx} on
                        (#{main_join_clause} and interests_#{idx}.id = ?)", i]
  profiles = profiles.join(join_clause)
end
profiles

您可能需要更改 main_join_clause 以满足您的需要。

关于ruby-on-rails-3 - 导轨 : join with multiple conditions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5376869/

相关文章:

css - ruby rails : Required input field CSS not showing

php - MySQL 错误代码 1215 : Cannot add foreign key Constraint on ALTER TABLE : Mysql

ruby-on-rails - 如何使 LIKE 子句不区分大小写?

ruby-on-rails - Rails 模型范围内的关联数据

mysql - 仅当记录存在于 Rails 中时,如何删除它?

mysql - 将两个 SELECT 语句组合成一个 JOIN

mysql - 带有 JOIN 的 SQL,如果全局 WHERE 未填满,则一个表的列为空

ruby-on-rails - 如果 text_field_tag 中存在则显示值

ruby-on-rails-3 - ActiveAdmin:更改 css 文件?

ajax - 使用 AJAX(不是表单)更新 Rails 3 部分