验证关联模型的存在

时间:2011-12-06 15:00:08

标签: ruby-on-rails validation

我不明白我有以下型号:

class Seller < ActiveRecord::Base
  has_many :cars, :dependent => :destroy
end

class Car < ActiveRecord::Base
  belongs_to :seller
  # I have tried both with the validates existence gem:
  validates :existence => {:allow_nil => false}
  # And normally...
  validates_presence_of :seller
end

但如果我执行以下操作,则无效:

seller = Seller.new()
seller.cars.build()
seller.save # I get => false @messages={:seller=>["does not exist"], :seller_id=>["does not exist"]}  

我应该能做到这一点吗?

就像 - 它在保存母对象之前验证关联的模型 - 我没有定义validates_associated或类似的东西。

有任何线索吗?或者我得到了保存和验证所有错误的顺序?

2 个答案:

答案 0 :(得分:1)

我过去遇到过这种情况,并使用“inverse_of”来解决它。您还需要“accepts_nested_attributes_for”。因此,在卖家中,您可能希望将代码更改为以下内容:

class Seller < ActiveRecord::Base
  has_many :cars, :dependent => :destroy, :inverse_of => :seller
  accepts_nested_attributes_for :cars
end

答案 1 :(得分:1)

Seller不存在,因为它尚未保存在数据库中,它只在内存中,因此Car不知道它需要知道的Seller's id - 它必须将其添加到seller_id列。因此,您首先必须保存Seller,并且您不需要Car中的validates_presence_of:卖家电话。