Rails验证中的自定义方法

时间:2012-03-14 03:24:14

标签: ruby-on-rails rspec

tl; dr验证在浏览器中有效,但是在rspec中失败。我不确定原因。

回答:我试图批量分配user_id,但user_id不能批量分配。在控制器中正确构建它,在rspec中不正确。

这是我的清单模型。每个商家信息都有一个价格和与之相关的user_id。

在我的"列表"模特,我有"价格"。

在我的"用户" model我有一个名为" vip"。

的布尔属性

"价格"的最大值取决于用户的VIP状态。如果VIP,最高价格为400.否则,最高价格为200。

我写了一个方法" listing_ceiling"应该返回正确的最大值,具体取决于用户的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 个答案:

答案 0 :(得分:1)

您应该检查RSpec,问题不在于您的自定义验证方法,而在于您的测试设置。由于错误消息指出user == nil

答案 1 :(得分:1)

Listing#user返回nil。可能有两个问题。

  1. 您的商家信息没有用户。即所讨论的user_id的外键nilListing。 OR
  2. 您的商家信息 user_id列中的值。但是没有User具有该ID。
  3. 解决方案是将用户分配到您的商家信息。