2016-08-06 6 views
1

存在しないときに例外をスローする方法を、私は2つのモデルがあります。存在しない製品IDを使用してみましたが、product_idの列はnullになります。私はこのように挿入するときに例外をスローしたい。ActiveRecordのは:参照キーは、例えば

validateをモデルに挿入してから挿入する前に確認する方法があります。しかし、クライアントがそれをしないので、これは時間がかかると思います。 (何かが本当に間違っていた場合に備えて)。

答えて

1

これはリレーショナルデータベースの利点の1つです。マイグレーションにforeign_key参照を追加でき、すべてが完全に機能するはずです。実在しない製品を保存するすべての試みが失敗する場所でこれにより

class AddForeignKeyToCheckInDetails < AR::Migration 
    def change 
    remove_foreign_key :check_in_details, :products 
    add_foreign_key :check_in_details, :products, dependent: :delete 
    end 
end 

:あなたは、移行にrails g migration add_foreign_key_to_check_in_details

で移行を実行することができ 、あなたのような何かを追加する必要があります。 product_idカラムにNOT NULL制約を追加することも忘れないでください。check_in_detailをnull product_idで保存しようとすると成功します。移行へのアップデートは、次のようになります。

change_column :check_in_details, :product_id, :integer, null: false 

はそれがあなたの質問に答えるなら、私に教えてください。

+0

のみが動作します。両方をする必要がありますか?ありがとう。 –

+0

?あなたは列とadd_referenceを変更することを意味します。はい、参照を追加することはできますが、 'nil' product_idを使った投稿はできません。 – oreoluwa

+0

ああ。わかりました。あなたの親切な説明をありがとう:D –