Хобрук: Ваш путь к мастерству в программировании

Поиск в разных моделях в зависимости от состояния [ Ruby on Rails ]

Я новичок в веб-разработке и в частности в RoR, поэтому извините, если этот вопрос слишком очевиден. В любом случае, я пытаюсь создать веб-сайт по недвижимости, просто чтобы посмотреть, что для этого нужно, и я застрял в поиске. У меня есть несколько моделей, каждая для каждого вида недвижимости, например, квартиры, офиса, гаража и т. д., и когда пользователь ищет квартиру, он должен использовать модель «Квартира» для поиска, если она ищет гараж, то она надо искать в "гаражной" модели и так далее. Итак, не могли бы вы мне помочь и подсказать, что мне вставить в контроллер?


  • Вы можете использовать поле выбора, чтобы выбрать тип искомого объекта, и простой текст ввода, чтобы написать ключевые слова, чтобы найти искомый объект (ы). 07.10.2013

Ответы:


1

Определите сопоставление пользовательского ввода с классами.

SEARCH_TYPES = { 'apartment' => Flat, 'garage' => Garage, 'house' => House }

Определите класс на основе ввода пользователя и используйте методы поиска, как обычно.

def search
  if klass = SEARCH_TYPES[params[:search][:type]]
    klass.where(params[:search])
  else
    # handle no matching Class for type of search
  end
end

Что нельзя делать: Попробуйте получить класс напрямую из параметров.

07.10.2013
  • Вы бы создали новую модель для этого или поместили бы это в свой контроллер? 07.10.2013
  • @HeliosdeGuerra: это зависит. С одной стороны, делегирующий класс был бы лучше для удобочитаемости и тестов. Но, с другой стороны, это просто метод и константа. Коротко: если он не получит больше кода или не должен быть повторно использован, я бы поместил его в контроллер. 07.10.2013
  • Новые материалы

    Получение стоковых обновлений с помощью Python
    Для начинающего финансового аналитика Введение Описание: Этот проект Python создает скрипт для получения текущих обновлений акций с финансового веб-сайта Yahoo. Для этого проекта мы..

    Это все, что вам нужно знать о Kotlin в 2022 году
    Добро пожаловать! Kotlin — это язык программирования, популярность которого, кажется, растет, его действительно можно использовать для создания чего угодно, и если вы хотите узнать о Kotlin,..

    Текстовый графический интерфейс с Lanterna на Java
    Мой опыт работы с компьютерами (и текстовыми графическими пользовательскими интерфейсами) начался еще в восьмидесятых, когда я был ребенком, на дне рождения друга. Это был «новенький» Amstrad..

    Перезарядите свой мозг: умопомрачительный потенциал мозговых компьютерных интерфейсов
    Способность читать свои мысли и управлять объектами разумом долгое время были предметом человеческого любопытства, ограниченного областью научной фантастики… то есть до сих пор? С технологией,..

    Основы C# — Нулевой оператор объединения (??)
    Оператор ?? называется null-coalescing operator . Этот оператор используется для предоставления значения по умолчанию, если значение операнда в левой части оператора равно null ...

    Сравнение номеров версий в C++ с использованием синтаксического анализа строк
    Номера версий обычно используются для обозначения развития или обновлений программного обеспечения или любого другого продукта. При работе с номерами версий в C++ может быть полезно сравнить две..

    В мир искусственного интеллекта…
    ИИ — это новое топливо в современном мире. Куда бы вы ни обратились, с кем бы вы ни разговаривали — они, как правило, упоминают об ИИ хотя бы раз в ходе разговора. ИИ гудит повсюду. У каждого..