Rails integrate several activerecord relationships

I want to combine several active record relationships

For instance,

apple_companies = Company.where("name like ?","%apple%")
banana_companies = Company.where("name like ?","%banana%")

I want to combine these two relationships.

not merging, combining apple_companies.merge (banana_companies) => Company.where ("name like? And name like?", "% Apple%", "% banana%")

I want Company.where ("name like? Or name like?", "% Apple%", "% banana%")

after

I will code

companies = Company.none
company_name_list.each do |name|
    like = "%"+name+"%"
    companies += Company.where("name like ?",like)
end

but the code I wrote turns the companies into an array .....

So I can’t order pages for companies ... :(

Thank you

+4
source share
6 answers
apple_companies = Company.where("name like ?","%apple%")
banana_companies = Company.where("name like ?","%banana%")

apples = apple_companies.where_values.reduce(:and)
bananas = banana_companies.where_values.reduce(:and)

Company.where(apples.or(bananas))

. ActiveRecord Arel OR.

+3

, , - , :

apple_companies = Company.where("name like ?","%apple%").pluck(:id)
banana_companies = Company.where("name like ?","%banana%").pluck(:id)
ids = apple_companies + banana_companies.uniq
Company.where(id: ids)

, , , , .

+3

. any_of gem. :

apple_companies = Company.where("name like ?","%apple%")
banana_companies = Company.where("name like ?","%banana%")

Company.where.any_of(apple_companies, banana_companies)

pull request, .

+2

Company.where('name LIKE ? OR name LIKE ?','%apple%', '%banana%')

Company.where('name IN (?)', ['%apple%', '%banana%'])

:

names = []
company_name_list.each do |name|
    names << "%"+name+"%"
end

:

companies = Company.where('name LIKE ANY(Array[?])', names)
+1

, Arel .

Company.where(Company.arel_table[:name].matches_any(["%apple%", "%banana%"]))
0

Company.where(name: IN ('%apple%','%banana%'))
-1

Source: https://habr.com/ru/post/1538361/


All Articles