Sha256: 1c435628e0222456015fa2510fd2d45aad288f5c1c45cdfe6dc6f82c1fa81853

Contents?: true

Size: 686 Bytes

Versions: 49

Compression:

Stored size: 686 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
    find(:first, :conditions => [query_clauses.join(' OR '), *bindings])
  end
  
  def self.find_by_anything!(identifier)
    find_by_anything(identifier) or raise ActiveRecord::RecordNotFound, "No column equals \"#{identifier}\""
  end

end

Version data entries

49 entries across 49 versions & 1 rubygems

Version Path
upjs-rails-0.4.1 spec_app/features/support/find_by_anything.rb
upjs-rails-0.4.0 spec_app/features/support/find_by_anything.rb
upjs-rails-0.3.3 spec_app/features/support/find_by_anything.rb
upjs-rails-0.3.2 spec_app/features/support/find_by_anything.rb
upjs-rails-0.3.0 spec_app/features/support/find_by_anything.rb
upjs-rails-0.2.2 spec_app/features/support/find_by_anything.rb
upjs-rails-0.2.1 spec_app/features/support/find_by_anything.rb
upjs-rails-0.2.0 spec_app/features/support/find_by_anything.rb
upjs-rails-0.1.0 spec_app/features/support/find_by_anything.rb