0

我有这个代码:

def build_query(options)
  query = User
  query = query.where('first_condition')
  query = query.where('second_condition')
  query = query.where('items.category_id = ?', category) if (options[:category])
  if options[:location]
    query = query.where('users.location = ?', options[:location])
  end
  query = query.order('users.current_sign_in_at DESC')
  query = query.limit(MAX_RESULTS)
  return query
end

不幸的是,每次我这样做都会触发一个请求query = query.where(...)

我可以链接所有 where 子句 ( where().where()...),但是我如何保留我if的 s ?

有没有办法告诉 ActiveRecord 不要触发查询?

4

1 回答 1

2

您可以收集conditions变量中的所有条件:

conditions = {}
conditions.merge('first_condition') if ...
conditions.merge('second_condition') if ...
# snip

User.where(conditions).order('users.current_sign_in_at DESC').limit(MAX_RESULTS)
于 2013-09-17T10:14:24.937 回答