Рельсы, пользовательские искатели - PullRequest
2 голосов
/ 19 августа 2010

Итак, я хочу иметь возможность получить объект, используя find_by_id_or_name, я чувствую, что видел другой вопрос, подобный этому, но мне трудно найти какие-либо ресурсы для создания моего собственного поиска.

1 Ответ

5 голосов
/ 19 августа 2010

Вы можете сделать это, добавив метод класса к вашей модели, например

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 и выполнять поиск по имени, только если он содержит другие символы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...