Skip to content

Instantly share code, notes, and snippets.

@Fivell
Last active December 20, 2015 04:39
Show Gist options
  • Save Fivell/6072447 to your computer and use it in GitHub Desktop.
Save Fivell/6072447 to your computer and use it in GitHub Desktop.
find by anything activerecord
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment