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