Использование где в проверке пользовательской модели - PullRequest
0 голосов
/ 21 марта 2011

Платформа: Rail 3.0
База данных: MySQL 5.1

Бизнес-требование: за один раз может быть выпущен только один товар. После возврата выданного товара может быть выдан новый товар того же товара. Одновременно может быть выпущено несколько предметов из разных продуктов.

Для выполнения вышеуказанного бизнес-требования я проверяю, есть ли уже товар, выпущенный для того же продукта в том же диапазоне дат (проверяя, есть ли совпадение дат в моем where ниже).

Однако я получаю следующее исключение: NoMethodError: неопределенный метод `where 'для лекции: Модуль .

Мне нужно иметь возможность использовать свою пользовательскую проверку для обеспечения выполнения этого бизнес-требования. Есть идеи? Ниже то, что я имею до сих пор:

class Item < ActiveRecord::Base
  validate :validate_one_item_for_product
  def validate_one_item_for_product
    items = Item.where( "issue_date < ? and return_date > ? and product_id = ?",
                        return_date,
                        issue_date,
                        product_id)
    errors.add( :base,
                "item already issued for this product, not returned yet") if items.size > 0
  end
end

1 Ответ

2 голосов
/ 21 марта 2011

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

self.class.where должно быть в порядке.

...