belongs_toのバリデーションについて
以下のような中間テーブルを作成した。
class Tagging < ApplicationRecord
belongs_to :post
belongs_to :programming_language
end
create_table "taggings", force: :cascade do |t|
t.bigint "post_id"
t.bigint "programming_language_id"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
t.index ["post_id"], name: "index_taggings_on_post_id"
t.index ["programming_language_id"], name: "index_taggings_on_programming_language_id"
end
add_foreign_key "taggings", "posts"
add_foreign_key "taggings", "programming_languages"
このテーブルに対するバリデーションテストを作成している時、現在何もバリデーションを実行するコードを書いていないのにバリデーションが発生したので原因を探った。
belongs_to
単体のデフォルト設定について
今回の場合のように単体で用いた場合外部キーカラムに値を設定していなければバリデーションが実行される。
optional: true
このoptionを渡すことによって外部キーカラムに値が入っていなかったり関連先に存在しないidを設定してもバリデーションが発生しない。
required: false
optional: true
と同様の機能を果たすオプションとしてrequired: false
が存在する。
これは、Rails5以前ではデフォルトでrequired: false
になっていたもので当時は外部キーに対するバリデーションを行うためにこのオプションをtrue
にしなければならなかった。
しかし、dhh曰くこの挙動はおかしいのでデフォルトでtrue
にしようとなったが、デフォルトでtrue
となるオプションはダメなんじゃないの?ということでoptional
という代替オプションが誕生したっぽい
これがその時のissue?
Author And Source
この問題について(belongs_toのバリデーションについて), 我々は、より多くの情報をここで見つけました https://qiita.com/s_yanada/items/094a01b829db3e08e0be著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .