Method: Simple::SQL::Connection::Scope#where
- Defined in:
- lib/simple/sql/connection/scope/where.rb
#where(sql_fragment, arg = :__dummy__no__arg, placeholder: "?", jsonb: true) ⇒ Object
scope = Scope.new(“SELECT * FROM tablename”) scope = scope.where(id: 12) scope = scope.where(“id > ?”, 12)
In the second form the placeholder (usually a ‘?’) is being replaced with the numbered argument (since postgres is using $1, $2, etc.) If your SQL fragment uses ‘?’ as part of some fixed text you must use an alternative placeholder symbol:
scope = scope.where(“foo | ‘?’ = ‘^’”, match, placeholder: ‘^’)
If a hash is passed in as a search condition and the value to match is a hash, this is translated into a JSONB query, which matches each of the passed in keys against one of the passed in values.
scope = scope.where(metadata: { uid: 1, type: [“foo”, “bar”, “baz”] })
This feature can be disabled using the ‘jsonb: false` option.
scope = scope.where(metadata: { uid: 1 }, jsonb: false)
25 26 27 |
# File 'lib/simple/sql/connection/scope/where.rb', line 25 def where(sql_fragment, arg = :__dummy__no__arg, placeholder: "?", jsonb: true) duplicate.send(:where!, sql_fragment, arg, placeholder: placeholder, jsonb: jsonb) end |