Class: ApplicationRecord

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
lib/generators/katapult/basics/templates/app/models/application_record.rb

Class Method Summary collapse

Class Method Details

.find_by_anything(identifier) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/generators/katapult/basics/templates/app/models/application_record.rb', line 9

def find_by_anything(identifier)
  matchable_columns = columns.reject { |column| [:binary, :boolean].include?(column.type) }
  query_clauses = matchable_columns.collect do |column|
    qualified_column_name = "#{table_name}.#{column.name}"
    is_mysql = connection.class.name =~ /mysql/i
    target_type = is_mysql ? 'CHAR' : 'TEXT' # CHAR is only 1 character in PostgreSQL
    column_as_string = "CAST(#{qualified_column_name} AS #{target_type})"
    "#{column_as_string} = ?"
  end
  bindings = [identifier] * query_clauses.size
  where([query_clauses.join(' OR '), *bindings]).first
end

.find_by_anything!(identifier) ⇒ Object



22
23
24
25
# File 'lib/generators/katapult/basics/templates/app/models/application_record.rb', line 22

def find_by_anything!(identifier)
  find_by_anything(identifier) or raise ActiveRecord::RecordNotFound,
    "No column equals #{identifier.inspect}"
end

.these(arg) ⇒ Object



5
6
7
# File 'lib/generators/katapult/basics/templates/app/models/application_record.rb', line 5

def these(arg)
  where(id: arg.collect_ids)
end