Ruby on Railsでbelongs_toを使用する方法

レール 4:
Movie と Actor という 2 つのモデルがあると仮定しましょう。 Actor には多くの映画があり、Movie は Actor に属します。ほとんどの場合、開発者は外部キー Actor_id が存在するかどうかを検証するために使用されます。この場合、入力されたアクター ID が存在するかどうかに関してアクター モデルは検証されません。これは、フォームを送信するときにフィールドが空ではないことを常に検証する属性検証に似ています。

外部キーによる検証:

class Movie < ApplicationRecord の所属先 :actor 検証 :actor_id、存在: true end
class Actor < ApplicationRecord has_many :movies、依存: :destroy end

上記のシナリオでは、通常の属性の存在バリデータとは異なり、アクター ID の存在を検証します。

例: Actor.create(タイトル: “abc”) => {id: 1, title: 'abc'} m = Movie.new(title: “ok ok”, actress_id: 111) => m.valid? => true => Actor.find(111) ActiveRecord::RecordNotFound: 'id'=111 のアクターが見つかりませんでした

有効な俳優がなくてもムービー レコードを保存できます。

協会あり

class Movie < ApplicationRecord の所属先 :actor を検証します:actor、存在: true end

(または)

class Movie < ApplicationRecord の所属先:actor、必須: true end
class Actor < ApplicationRecord has_many :movies、依存: :destroy end
例: Actor.create(タイトル: “abc”) ==> {id: 1, title: 'abc'} m = Movie.new(title: “ok ok”, actress_id: 111) ==> m.valid? => false ==> m.errors.full_messages, ['アクターを空白にすることはできません']

この場合、入力されたアクターが存在するかどうかが常に検証されます。無効なアクターの場合は、エラーがスローされます。これは、関連付けを行うためのベスト プラクティスです。関連付けられたオブジェクトが存在するかどうかを常にチェックします。

レール5

Rails5 から、これらの検証はデフォルトで追加されました。これは、belongs_to 関連付けを定義するときに関連付けオブジェクトが存在する必要があることを検証します。

リリースノート

http://guides.rubyonrails.org/5_0_release_notes.html(関連付けが存在しない場合、belongs_to はデフォルトで検証エラーをトリガーするようになりました。)

初期化ファイルで構成オプションを設定することで、アプリケーションからこの機能を完全にオプトアウトできます。

config/initializers/new_framework_defaults.rb
Rails.application.config.active_record.belongs_to_required_by_default = false

この初期化ファイルは、rails5 アプリケーションにのみ存在します。 Rails アプリケーションの古いバージョンから移行し、必要な変更を加える場合は、この初期化ファイルを手動で追加する必要があります。

class Post < ApplicationRecord has_many :comments、依存: :destroy end
class Comment < ApplicationRecord の所属先 :post end
c = Comment.create(title: “素晴らしい投稿”) c.errors.full_messages.to_sentence => “投稿は存在する必要があります”

関連するレコードがなければコメント レコードを作成することはできません。

設定することで、このデフォルトの動作をオプトアウトできます。

所属先:post、オプション: true
c = Comment.create(タイトル: “素晴らしい投稿”)
=> 

RailsCarma が提供している Ruby on Rails開発サービス 過去8年間以上。当社の開発者は、あらゆる種類の実行に精通しています。 Ruby on Rails の Web 開発 プロジェクトを構築し、既存の Rails アプリケーションの機能を強化します。当社の開発スキルやこれまでに取り組んできたプロジェクトについて詳しく知りたい場合は、お問い合わせください。

関連記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

jaJapanese