Rails 3: Как отфильтровать элементы «ActiveRecord :: Relation»? - PullRequest
2 голосов
/ 07 января 2011

products является ActiveRecord::Relation.Я фильтрую некоторые продукты, как это:

filtered_products = my_filter(products)

, где

def my_filter(products)
  last_brand_id = last_model_id = nil
  filtered_products = []

  products.each do |product|
    filtered_products << product if (product.model.brand_id != last_brand_id) || (product.model_id != last_model_id)

    last_brand_id = product.model.brand_id
    last_model_id = product.model_id
  end

  filtered_products
end

Теперь я хочу заказать фильтрованные продукты:

filtered_products.order(...)

, но я не могуэто потому, что filtered_products не является ActiveRecord::Relation.

Как мне переписать my_filter, чтобы он возвращал ActiveRecord::Relation.

Или есть лучшее решение?

1 Ответ

0 голосов
/ 07 января 2011

Я предлагаю вам преобразовать метод my_filter в метод класса или область видимости, чтобы сохранить ваши объекты.

EDIT 1:

Давайте попробуем дать вамболее широкое решение:

Сначала объявите функцию фильтра:

def my_filter(product)
  @last_brand_id ||= nil
  @last_model_id ||= nil
  test = (product.model.brand_id != last_brand_id || product.model_id != last_model_id)
  @last_brand_id = product.model.brand_id
  @last_model_id = product.model_id
  test
end

Затем выберите нужные продукты:

filtered_products = products.select{|p| p if my_filter(p)}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...