Sha256: c1353c99f5e9728d7905eafa2c98d7e6a1c1f208aa1889875c36e6d0e8f41590

Contents?: true

Size: 670 Bytes

Versions: 2

Compression:

Stored size: 670 Bytes

Contents

ActiveRecord::Base.class_eval do

  def self.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}"
      column_as_string = "CAST(#{qualified_column_name} AS CHAR)"
      "#{column_as_string} = ?"
    end
    bindings = [identifier] * query_clauses.size
    where([query_clauses.join(' OR '), *bindings]).first
  end
  
  def self.find_by_anything!(identifier)
    find_by_anything(identifier) or raise ActiveRecord::RecordNotFound, "No column equals \"#{identifier}\""
  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
katapult-0.2.0 lib/generators/katapult/basics/templates/lib/ext/active_record/find_by_anything.rb
katapult-0.1.2 lib/generators/katapult/basics/templates/config/initializers/find_by_anything.rb