Rails 动态 where 子句
Rails dynamic where clause
我有一个基于表单中的 json 对象调用的 where 子句。该对象具有一系列区域设置的布尔值,这些值将用于在给定区域设置内查找场地。
有没有比使用布尔值构建长字符串更好的方法来编写一系列查询?在正确方向上的任何帮助将不胜感激。谢谢!
hard_worker.rb
def build_locales
filters = []
filters.push 'locale_north' if @lead.locale_north
filters.push 'locale_south' if @lead.locale_south
filters.push 'locale_east' if @lead.locale_east
filters.push 'locale_west' if @lead.locale_west
return filters
end
def build_string
filters = build_locales
s = ''
filters.each_with_index do |f, i|
s+= "#{f} = true"
s+= " OR " if i < filters.size - 1
end
end
def perform(lead_id)
@venues = Venue.where(receive_all: true).or(Venue.where(build_string))
// ... more code ...
end
where
子句是可链接的,因此如果您需要使用这样的方法,您可以轻松地进行大量查询。
@venues = Venue.all
@venues = @venues.where(receive_all: true)
filters.each do |filter|
@venues = @venues.or(Venue.where(filter.to_sym: true))
end
# after all of this you can just return @venues
@venues
我有一个基于表单中的 json 对象调用的 where 子句。该对象具有一系列区域设置的布尔值,这些值将用于在给定区域设置内查找场地。
有没有比使用布尔值构建长字符串更好的方法来编写一系列查询?在正确方向上的任何帮助将不胜感激。谢谢!
hard_worker.rb
def build_locales
filters = []
filters.push 'locale_north' if @lead.locale_north
filters.push 'locale_south' if @lead.locale_south
filters.push 'locale_east' if @lead.locale_east
filters.push 'locale_west' if @lead.locale_west
return filters
end
def build_string
filters = build_locales
s = ''
filters.each_with_index do |f, i|
s+= "#{f} = true"
s+= " OR " if i < filters.size - 1
end
end
def perform(lead_id)
@venues = Venue.where(receive_all: true).or(Venue.where(build_string))
// ... more code ...
end
where
子句是可链接的,因此如果您需要使用这样的方法,您可以轻松地进行大量查询。
@venues = Venue.all
@venues = @venues.where(receive_all: true)
filters.each do |filter|
@venues = @venues.or(Venue.where(filter.to_sym: true))
end
# after all of this you can just return @venues
@venues