モデルを使用した基本的な請求書のセットアップがあります: 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
だから2つの問題:
削除する
validates :invoice_id, :presence => true
と、Line items invoice can't be blank
エラー メッセージは表示されなくなりますが、なぜですか? line_items の送り状 ID を検証したいのですが、すべての line_items には送り状 ID があるはずです。エラーを発生させずに line_items の Invoice_id を検証するにはどうすればよいですか?Status can't be blank
デフォルト値として設定するとエラーが発生するのはなぜですか? おそらくinvoices_controllerで設定できますが、デフォルト値はモデルに設定する必要があると思いますよね?ステータスの存在を検証し、モデルにデフォルト値を保持するにはどうすればよいですか?