Функциональность логики поиска - PullRequest
0 голосов
/ 09 ноября 2009

Функциональность, которую я ищу: у меня есть форма, которая будет искать мою модель «Предложение». Я хочу, чтобы форма содержала поле выбора и отображала категории, которые у меня есть. Теперь «категория» - это просто столбец в моей модели «Предложение», поэтому следующий код из Railscasts не работает (так как он предполагает таблицу категорий и использование category_id)

            <%= f.collection_select :category_id_equals, Category.all, :id, :name, :include_blank => true %>

Самая близкая вещь, которую я получил, была

<%= f.collection_select :category_equals, Proposal.category_like(""), :id, :category, :include_blank => true %>

Это бы отлично работало, если бы приносило уникальные значения из столбца категории, а не повторяющиеся случаи: - /.

Также ... это приводит меня к вопросу - должен ли я вместо этого использовать category_id и создать таблицу категорий, даже если она будет иметь только столбец id и name?

Заранее спасибо: -)

1 Ответ

2 голосов
/ 10 ноября 2009

Прежде всего, да, вы должны поместить эти категории в их собственную модель. Или рассмотрите плагин, подобный acts_as_taggable* Категория - это сущность в вашем приложении, и она должна существовать как таковая.

  1. Добавление его в качестве модели позволяет легко заставить пользователей выбирать из списка и поддерживать список.
  2. Вы можете когда-нибудь добавить видимое логическое значение, если хотите скрыть некоторые старые категории в представлении. Вы можете просто добавить видимый named_scope, чтобы легко запросить элементы для заполнения collection_select.
  3. Создание категории в качестве модели также позволит вам узнать, когда была создана каждая категория.

Если вы хотите соединить что-то с тем, что у вас есть, вы можете загрузить эти объекты, поместить их категории в массив и затем выполнить array.uniq!, чтобы получить только те, которые вам нужны.

Вы можете добавить метод к предложению, который возвращает уникальные категории.

def self.unique_categories
  categories = []
  Proposal.all.each do |p|
    categories << p.category
  end
  categories.uniq
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...