Рельсы, пользовательские искатели

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

Другие вопросы по тегам