module DefaultWhere::Scope
Constants
- PATTERN
Public Instance Methods
default_where_scope(params)
click to toggle source
# File lib/default_where/scope.rb, line 17 def default_where_scope(params) where_string = [] where_hash = {} params.each do |key, value| real_key, sign_str = key.split('-') agent_key = key.gsub(/[-.\/]/, '_') if value.nil? || value == [] if sign_str == 'not' where_string << "#{real_key} IS NOT NULL" elsif sign_str.nil? where_string << "#{real_key} IS NULL" else raise "#{key}'s value can not be nil" end elsif sign_str == 'any' # 支持 postgres array 查询 where_string << ":#{agent_key} = ANY(#{real_key})" where_hash.merge! agent_key.to_sym => value elsif real_key.match?(/.\/./) # 支持 postgres json 查询 real_key, i18n_key = key.split('/') where_string << "#{real_key}->>'#{i18n_key}' = :#{agent_key}" where_hash.merge! agent_key.to_sym => value else case sign_str when 'll' real_value = "#{value}%" when 'rl' real_value = "%#{value}" when 'like' real_value = "%#{value}%" else real_value = value end where_string << "#{table_name}.#{real_key} #{PATTERN[sign_str.to_s.to_sym]} :#{agent_key}" where_hash.merge! agent_key.to_sym => real_value end end [where_string, where_hash] end