ActiveRecordのhas_many
およびbelongs_to
メソッドは両方とも:foreign_key
オプションをとります。非標準のFK列名を処理するためにそれを使用する必要がある場合は、親モデル(has_many
)、子モデル(belongs_to
)、またはその両方に設定する必要がありますか、それとも重要ですか?ActiveRecordの1対多関連の場合:foreign_keyオプションを設定する必要がありますか?
1
A
答えて
2
両方に:foreign_key
オプションを設定する必要があります。
は、次の2つのモデルを検討:
class Article < ActiveRecord::Base
has_many :comments, :foreign_key => "articleID"
end
class Comment < ActiveRecord::Base
belongs_to :article, :foreign_key => "articleID"
end
has_many
を宣言Article
クラスをあなたがすることができます:
Article.find(12).comments # Finds all comments with comment.articleID == 12
Comment
モデルでbelongs_to
メソッドの呼び出しがすることができます:
Comment.last.article # Finds article with article.id == comment.articleID
どちらの場合も、外部キーが使用されています。いずれかの場所で省略すると、その特定の関連プロキシは正しく動作しません。
2
belongs_to
は、外部キーが関連付け名_id
と推測します。
has_one
は、外部キーが包含クラスの名前+ _id
であると推測します。
通常、非標準のキーの場合は、1か所で必要です。
関連する問題
- 1. 多対多のdoctrine2の関連付けはどのように定義する必要がありますか?
- 2. 多型関連を削除する必要がありますか?
- 3. 1対多の関係で代理キーが必要ですか?
- 4. MySQLデータベースで多対多の関係を行う場合、すべてのキーIDを結合テーブルに転送する必要がありますか?
- 5. コアデータには1対多の関係がありますか?
- 6. 1対1または1対多の関連付け
- 7. MySQLデータベースの設計:1対1、多対多、多対多、多すぎますか?
- 8. なぜこのプロパティを設定する必要がありますか?getsture.scale = 1?
- 9. オブジェクト指向プログラミングでは、オブジェクトは多対多の関係を維持する必要がありますか?
- 10. 2つの外部キーが発生した場合、多対多の関係にする必要がありますか?
- 11. ActiveRecordの多関連クエリ
- 12. 'SignInScheme'オプションを指定する必要があります
- 13. Rails "foreign_key"との "has_many"関連
- 14. 1対多、1ビューカスタムモデルが必要ですか?
- 15. NHibernateの1対多エンティティマッピング - キー列はNULL可能である必要がありますか?
- 16. WinFormsデザイナを使用する場合、常にDPIを96に設定する必要がありますか?
- 17. setTimeoutを使用する場合、clearTimeoutを設定する必要がありますか?
- 18. この場合、イベントを定義する必要はありますか?
- 19. ビューでモデルデータを設定する必要がありますか?
- 20. ViewControllerでUIGestureRecognizerを設定する必要がありますか?
- 21. AssemblyConfigurationAttributeを設定する必要がありますか?
- 22. XMLスキーマ(XSD) - ある要素に特定の値がある場合は、別の要素が存在する必要があります。逆の場合は
- 23. プロビジョニングプロファイルが「自動」に設定されている場合は、更新する必要がありますか?
- 24. プロシージャ内の問合せPLSQLは1行を戻す必要がありますが、さらに多くの行を戻す必要があります
- 25. RailsアプリケーションでServerSignatureとServerTokensのApache設定オプションを設定する必要はありますか?
- 26. 多型関連を設定する
- 27. 関連の両側から削除する必要がありますか?
- 28. この場合、もっと多くの検索を使用する必要がありますか?
- 29. ++ varを使用する必要がある場合はありますか?
- 30. はnullに多対一の関連付けを設定し、
*常に*両方に ':foreign_key'オプションを設定する必要はありません。特定の例では、レガシーの列名があるため、そうします。しかし、この問題はアソシエーション名を 'belongs_to:default_account、:class_name =>" Account "、:foreign_key =>" account_id "'のように変更した場合に大きくなります。 Accountクラスの対応する 'has_one'は、外部キーを指定する必要はありません。 –