Переместить эту логику в метод поиска? - PullRequest
0 голосов
/ 18 декабря 2009

Это работает как есть, но я уверен, что это неаккуратно. Любые советы о том, как получить всю эту логику больше рельсов? Я пытаюсь реализовать will_paginate с этим, но сначала мне нужен более чистый способ выбора правильных записей.

#shoe table
-------------------------------------
size  | brand     | color   | sold
-------------------------------------
8       somebrand   black     false
10      another     brown     true
-------------------------------------


def index

  @shoes = Shoe.find_all_by_sold(false, :include => :assets)

  #params[:size] = '8,9,10,11,11.5' || '8,9' || 'all'
  if params[:size]
    sizes = params[:size].split(',')
    @shoes.reject! { |shoe| !sizes.include?(shoe.size.to_s) } unless sizes.include?('all')
  end

  # params[:color] = 'brown,black' || 'brown' || 'all'
  if params[:color]
    colors = params[:color].split(',')
    @shoes.reject! { |shoe| !colors.include?(shoe.color.parameterize) }  unless colors.include?('all')
  end

  # params[:brand] same as the others
  if params[:brand]
    brands = params[:brand].split(',')
    @shoes.reject! { |shoe| !brands.include?(shoe.brand.parameterize) } unless brands.include?('all')
  end

end

Ответы [ 2 ]

3 голосов
/ 18 декабря 2009

Вы определенно изобретаете колесо здесь.

Шаг 1: чтение именованных областей.

Шаг 2: Посмотрите на searchlogic

2 голосов
/ 18 декабря 2009

Для этих запросов можно создать несколько именованных областей, таких как by_size, by_colour и by_brand в вашей модели Shoe. Затем вы можете связать их вместе в различных перестановках.

Этот Railscast должен дать вам идею.

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