СУХИЕ переменные экземпляра для похожих запросов поиска - PullRequest
1 голос
/ 12 сентября 2011

Возможно, на этот вопрос уже можно было ответить, но я не уверен, что искать.

У меня есть страница со списком брендов одежды от А до Я, в которой есть каждый блок для итерации.торговый центр.Я хотел бы разделить этот список по буквам, и иметь ряд ссылок от А до Я вверху, где каждая буква переходит вниз по странице к их букве в списке.Однако, чтобы сделать это, я могу думать только о создании каждого цикла для каждой буквы, с <A NAME="A"> и т. Д. Рядом с ним и переменной экземпляра для каждой.

Мой вопрос: какЯ избегаю иметь 26 различных переменных экземпляра в моем контроллере?

@Abrands = Product.where('brand LIKE ?', "A%")
@Bbrands = Product.where('brand LIKE ?', "B%")
@Cbrands = Product.where('brand LIKE ?', "C%")
etc.

Это явно не очень СУХОЙ, есть ли лучший способ сделать это?Я все еще нахожу свои ноги с рельсами, любая помощь будет высоко ценится!

Ответы [ 3 ]

2 голосов
/ 12 сентября 2011

Хотелось бы что-нибудь подобное для вас?

@products = Product.all.group_by{|product| product.brand.slice(0,1)}

Это хорошая однострочная строка, которая выдаст только 1 запрос. В результате получится хеш, аналогичный предложениям других пользователей.

1 голос
/ 12 сентября 2011
# Hash initialization to empty arrays
@brands = Hash.new { |h,k| h[k] = [] }

Product.all.each do |product|
  @brands[product.brand[0].upcase.to_sym] << product
end

, который возвращает хэш, подобный следующему:

{:A => [products for brands A*], :B => [products for brands B*], ...}

Этот метод имеет преимущество, заключающееся в выполнении только одного запроса вместо 26.

0 голосов
/ 12 сентября 2011

Помогает ли вам этот эпизод openrailscasts? Неактивная запись (Продукция по письму)

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