Rails 2.3使用循环进行自定义验证以检查是否存在

时间:2012-02-01 13:55:54

标签: ruby-on-rails validation model associations

我有一个名为Booking的模型,在创建时应该检查是否找到了关联。 代码是:

  def price_details
    variant.tour.price_details.each do |pd|
      if category == pd.category
        if date_from >= pd.from_date && date_from <= pd.to_date
          return true
        else
          errors.add_to_base('error message')
          return false
        end
      end
    end
    nil
  end

预订belongs_to variant,并在预订中保存variant_id。 date_from也是Booking模型中的一个字段。

当我尝试运行验证时,我得到NoM​​ethodError:nil的未定义方法`tour':NilClass。

如何在创建之前访问变体?

修改

仍有问题,所以让我们在控制台中尝试。

b = Booking.new
b.valid?
=> NoMethodError: undefined method `tour' for nil:NilClass

variant.tour.price_details.each do | pd |是失败的线。 如果我这样做也会发生同样的事情

b = Booking.new(:variant_id => params[:variant_id])

2 个答案:

答案 0 :(得分:0)

为了从预订中获取变体的方法和属性,请确保已将variant_id分配给新的预订实例,例如:booking = Booking.new(:variant_id => params[:variant_id])。然后,您可以在预订时致电保存方法。我假设variant_id在控制器方法的params散列中可用。

答案 1 :(得分:0)

这只是因为没有找到相关记录因此返回NIL。 b = Booking.new(:variant_id => params[:variant_id]) 这里variant_id不在variants