Пользовательский метод в Rails Validation - PullRequest
0 голосов
/ 14 марта 2012

tl; dr проверка работает в браузере, но не работает с rspec.Я не уверен, почему.

ответ: Я пытался назначить массовое назначение user_id, но user_id не было массово назначаемым.Правильно собирал его в контроллере, неправильно в rspec.

Это моя модель листинга.Каждый листинг имеет цену и идентификатор пользователя, связанный с ним.

В моей модели «листинга» у меня есть «цена».

В моей модели «пользователя» у меня есть логический атрибут, называемый «vip ".

Максимальное значение для" цены "зависит от VIP-статуса Пользователя.Если VIP, максимальная цена равна 400. Иначе, максимальная цена равна 200.

Я написал метод «перечисление_потоков», который должен возвращать правильное максимальное значение в зависимости от VIP-статуса пользователя.

Это работает в браузере, но когда я запускаю свои тесты, rspec возвращается с ошибкой:

undefined method `vip?' for nil:NilClass

Я не совсем уверен, где у меня не хватает здесь.Он корректно работает в браузере, но не работает при тестировании с помощью rspec.Вот код:

validates_numericality_of :price, :presence => true, :greater_than => 10, :less_than => :listing_ceiling

def listing_ceiling
    if self.user.vip?
        400.01
    else
        200.01
    end
end

Есть идеи, почему он потерпит неудачу?

Ответы [ 2 ]

1 голос
/ 14 марта 2012

Listing#user возвращает nil. Могут быть две проблемы.

  1. Ваш список не имеет пользователя. т.е. внешний ключ user_id равен nil для рассматриваемого Listing. OR
  2. Ваша запись имеет значение в столбце user_id. Но нет User с этим идентификатором.

Решение состоит в том, чтобы назначить пользователя вашему списку.

1 голос
/ 14 марта 2012

Вы должны проверить свой RSpec, проблема не в вашем методе проверки cutom, а в настройке вашего теста. Как сообщение об ошибке гласит user == nil!

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