我有一个名为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模型中的一个字段。
当我尝试运行验证时,我得到NoMethodError: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])
答案 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
表