Вы можете сделать это, добавив метод класса к вашей модели, например
class Model < ActiveRecord::Base
def self.find_by_id_or_name(id_or_name)
find :first, :conditions => ['id = ? or name = ?', id_or_name, id_or_name]
end
def self.find_all_by_id_or_name(id_or_name)
find :all, :conditions => ['id = ? or name = ?', id_or_name, id_or_name]
end
end
Затем вы сможете сделать
Model.find_by_id_or_name(id_or_name)
Вы можете немного изменить метод в зависимости от ваших требований, например, если вы хотите попробовать сначала id
, а затем name
, вы можете сначала использовать Model.exists?
, чтобы проверить, есть ли соответствующая запись, прежде чем выполнить find_by_name
. Вы также можете посмотреть, если id_or_name
состоит из символов 0-9
, и предположить, что это был id
и выполнять поиск по имени, только если он содержит другие символы.