在我的模型中,我有两种方法可以在验证之前填充Invoice
的属性:
validates :account_id, :presence => true
validates :account_address, :presence => true
validates :number, :presence => true
validates :number, :uniqueness => true, :scope => :client_id
before_validation :generate_number, :associate_addresses, :on => :create
def generate_number
self.number = self.client.invoices.count + 1
end
def associate_addresses
self.account_address = self.account.addresses.first
end
在控制器中:
@invoice = @account.invoices.build(:client_id => @client.id)
if @invoice.save
#it saved
end
我的问题是associate_addresses
和generate_number
方法只有在我删除:scope => :client_id
验证的:number
参数时才会触发。
为什么它会因此而跳过before_validation
回调?
使用Rails 3.0.3
谢谢! 感谢。
答案 0 :(得分:2)
不知道为什么它会跳过before_validation
方法,但是要在Rails 3中确定uniqueness
验证的范围,你应该使用以下语法:
validates :number, :presence => true, :uniqueness => { :scope => :client_id }
我想您的语法是尝试添加scope
验证,但不存在。可能有一个Rails错误使得跳过before_validation
方法。