У меня есть базовая настройка счета с моделями: Invoice, Item, LineItems.
# 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
, но почему? Я хочу проверить invoice_id на line_items, ВСЕ line_items должны иметь invoice_id. Как я могу проверить invoice_id на line_items без получения ошибки?Почему я получаю сообщение об ошибке
Status can't be blank
, если я установил его как значение по умолчанию? Я, вероятно, могу настроить его на invoices_controller, но я думаю, что значение по умолчанию должно быть установлено в модели, верно? Как я могу проверить наличие статуса и по-прежнему иметь для него значение по умолчанию в модели?