ruby-on-rails-3 – Rails:加入多个条件

前端之家收集整理的这篇文章主要介绍了ruby-on-rails-3 – Rails:加入多个条件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个简单的模型 @H_502_2@class Interest < ActiveRecord::Base has_and_belongs_to_many :user_profiles end class UserProfile < ActiveRecord::Base has_and_belongs_to_many :interests end

当我想查询具有特定兴趣的所有用户时,这很简单

@H_502_2@UserProfile.joins(:interests).where('interests.id = ?',an_interest)

但是,我如何找到有多种兴趣的用户?当然,如果我这样做

@H_502_2@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赞不绝口

@H_502_2@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表达式

您需要做的是将多个连接写出来

@H_502_2@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以满足您的需求.

原文链接:https://www.f2er.com/ruby/269594.html

猜你在找的Ruby相关文章