我有一个带有模型的基本发票设置:发票、项目、行项目。
# invoice.rb
class Invoice < ActiveRecord::Base
has_many :line_items, :dependent => :destroy
validates_presence_of :status
before_save :default_values
def default_values
self.status = 'sent' unless self.status
end
end
# item.rb
class Item < ActiveRecord::Base
has_many :line_items
validates_presence_of :name, :price
end
# line_item.rb
class LineItem < ActiveRecord::Base
belongs_to :item
belongs_to :invoice
before_save :default_values
validates_presence_of :invoice_id
validates :item_id, :presence => true
end
模型中还有更多内容,但为了简单起见,我只介绍了上述内容。
我收到以下错误:
2 errors prohibited this invoice from being saved:
Line items invoice can't be blank
Status can't be blank
所以有两个问题:
如果我删除
validates :invoice_id, :presence => true
,我不会再收到Line items invoice can't be blank
错误消息,但为什么呢?我确实想验证 line_items 上的 invoice_id,所有 line_items 都应该有一个 invoice_id。如何验证 line_items 上的 invoice_id 而不会出错?Status can't be blank
如果我将其设置为默认值,为什么会出现错误?我可能可以在 invoices_controller 上设置它,但我认为应该在模型中设置默认值,对吧?如何验证状态的存在并在模型中仍有默认值?