0

私は次のモデルを持っています:

class Price < ActiveRecord::Base
  belongs_to :article, inverse_of: :prices
  validates :article_id, presence: true
end

class Article < ActiveRecord::Base
  has_many :prices, dependent: :destroy, inverse_of: :article
end

それらを作成するときのコードは、保存時に検証エラーを発生させます (Prices は無効です):

article = Article.new
article.prices.build( { amount: 55.0 } )
article.save! #=> Validation failed: Prices is invalid

そのため、Rails は子オブジェクト (価格) の前に親オブジェクト (記事) を保存するほどスマートではないため、保存する前に article_id を価格に割り当てることができます。

ビルド機能を使用するときに外部キーの検証をどのように使用しますか?

うまくいくはずのかなり標準的なシナリオのように思えますか?

(データベース レベルの制約を使用できることはわかっていますが、ここではアプリケーション レベルの検証について質問しています)

4

1 に答える 1

0

Railsの方法では、このようにすることができます

class Article < ActiveRecord::Base
  has_many :prices, dependent: :destroy, inverse_of: :article
  validates_associated :prices
end

しかし、これはこれに対する 100% の解決策ではありません。

この宝石を試すことができます https://github.com/perfectline/validates_existence

于 2013-09-13T11:30:39.213 に答える