Рельсы, пользовательские искатели
Поэтому я хочу иметь возможность получить объект с помощью find_by_id_or_name
Я чувствую, что я видел другой вопрос, как этот, но мне трудно найти какие-либо ресурсы для создания моего собственного поиска.
1 ответ
Решение
Вы можете сделать это, добавив метод класса к вашей модели, например
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
и только поиск по имени, если он содержал другие символы.