Railsのhas_oneとbelongs_toの違い?[重複している]
2023-09-04 12:56:57
質問内容
私が理解しようとしているのは
has_one
の関係を理解しようとしています。
例えば、2つのモデル -
Person
と
Cell
:
class Person < ActiveRecord::Base
has_one :cell
end
class Cell < ActiveRecord::Base
belongs_to :person
end
を使うだけでよいのでしょうか?
has_one :person
の代わりに
belongs_to :person
で
Cell
のモデルですか?
同じではありませんか?
どのように解決するのですか?
いいえ、両者は互換性がありませんし、実際にいくつかの違いがあります。
belongs_to
は、外部キーがこのクラスのテーブルにあることを意味します。つまり
belongs_to
は外部キーを保持するクラスだけに入れることができます。
has_one
は、このクラスを参照する別のテーブルに外部キーが存在することを意味します。つまり
has_one
は他のテーブルのカラムによって参照されるクラスのみに適用されます。
というわけで、これは間違っています。
class Person < ActiveRecord::Base
has_one :cell # the cell table has a person_id
end
class Cell < ActiveRecord::Base
has_one :person # the person table has a cell_id
end
そして、これも間違っています。
class Person < ActiveRecord::Base
belongs_to :cell # the person table has a cell_id
end
class Cell < ActiveRecord::Base
belongs_to :person # the cell table has a person_id
end
正しい方法は、(もし
Cell
が含まれる場合
person_id
フィールドを含む)。
class Person < ActiveRecord::Base
has_one :cell # the person table does not have 'joining' info
end
class Cell < ActiveRecord::Base
belongs_to :person # the cell table has a person_id
end
双方向の関連付けのためには、それぞれ1つずつが必要で、それらは正しいクラスに入れなければなりません。一方向の関連付けの場合でも、どちらを使うかは重要です。
関連
-
[解決済み] gemのインストールができない - gemネイティブ拡張の構築に失敗 - そのようなファイルをロードできない -- mkmf (LoadError)
-
[解決済み] Rubyの文字列から日付への変換
-
[解決済み] Mac OS Xにhomebrewがインストールされているかどうかを確認する方法
-
[解決済み] Ruby:Rubyの配列にinclude.の反対はある?
-
[解決済み] Ruby on Railsのマイグレーションでデータベースのカラムの名前を変更するにはどうすればよいですか?
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] rake db:migrate db:reset とdb:schema:loadの違いについて
-
[解決済み] Rails 4で懸念事項を使用する方法
-
[解決済み】Railsの認証トークンを理解する
-
[解決済み】railsの文字列とtextの違い?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】bundle installが "Could not locate Gemfile "を返す。
-
[解決済み】Rails: sudo "コマンドが認識されないのはなぜですか?
-
[解決済み】取得中。「プロジェクトのクローンとマイグレート後に、「マイグレーションは保留中です。この問題を解決するには 'bin/rake db:migrate RAILS_ENV=development' を実行してください。
-
[解決済み】TypeError: SymbolからIntegerへの暗黙の変換がない。
-
[解決済み] Railsです。NameError: 初期化されていない定数
-
[解決済み] Rails ExecJS::ProgramError in Pages#home?
-
[解決済み] rails erb フォームヘルパー options_for_select :selected
-
[解決済み] railsアプリケーションでCookieのオーバーフロー?
-
[解決済み] 属性とカラムの違いは何ですか?
-
[解決済み] belongs_toとhas_oneの違いは何ですか?