我正在创建一些表单来过滤我的用户,表User
,我发现了ActiveRecord的乐趣。
User
有name
和function
列。
User
有许多Address
Address
有country
和town
列。
User
有许多Hobby
Hobby
有一个category
列。
在我的参数中,我有name
,function
,country
,town
和category
。
我基本上希望让所有匹配至少其中一个参数的用户(OR
条件,我使用MySQL数据库)。
提前致谢。
答案 0 :(得分:3)
在我的头脑中,我想这会做到这一点:
q = params[:query]
User.all(
:conditions => ["
users.name like ? or
users.function like ? or
addresses.country like ? or
addresses.town like ? or
hobbies.category like ?
", q, q, q, q, q],
:joins => [:hobbies, {:addresses => :country}]
)
答案 1 :(得分:1)
答案 2 :(得分:0)
我复制下面的一些代码,让你看到我的期望。
查询是使用OR
构建的,并且不包括空params
(不包括它们的值,也不包括连接)。
def self.filtering(name, country, category)
query, join_array, query_string = self, [], []
unless name.blank?
query_string << " users.name = :name"
end
unless country.blank?
query_string << "addresses.country = :country"
join_array << :addresses
end
unless category.blank?
query_string << "hobbies.category = :category"
join_array << :hobbies
end
join_array.each do |q|
query = query.joins(q)
end
q.where(query_string * " OR ", :name => name, :country => country, :category => category)
end