Rails - ベストプラクティス。依存するhas_oneリレーションの作成方法
2023-08-27 09:30:34
質問
has_oneリレーションを作成するためのベストプラクティスは何ですか?
例えば、私がユーザーモデルを持っていて、それがプロファイルを持たなければならないとしたら...
どうすれば実現できるでしょうか?
ひとつの解決策になります。
# user.rb
class User << ActiveRecord::Base
after_create :set_default_association
def set_default_association
self.create_profile
end
end
でも、これだとあまりきれいじゃないような...。 何か提案はありますか?
どのように解決するのですか?
has_oneリレーションを作成するベストプラクティスは、ActiveRecordコールバックの
before_create
よりも
after_create
. または、さらに早いコールバックを使用し、子プロセスが自身の検証ステップを通過しない問題に対処します (もしあれば)。
なぜなら
- をうまくコーディングすれば、子レコードのバリデーションが失敗したときに、ユーザーに表示する機会があります。
- ARは、親レコードを保存した後(作成時)、自動的に子レコードの外部キーに入力されます。AR はその後、親レコードを作成する一部として子レコードを保存します。
どうやるか。
# in your User model...
has_one :profile
before_create :build_default_profile
private
def build_default_profile
# build default profile instance. Will use default params.
# The foreign key to the owning User model is set automatically
build_profile
true # Always return true in callbacks as the normal 'continue' state
# Assumes that the default_profile can **always** be created.
# or
# Check the validation of the profile. If it is not valid, then
# return false from the callback. Best to use a before_validation
# if doing this. View code should check the errors of the child.
# Or add the child's errors to the User model's error array of the :base
# error item
end
関連
-
[解決済み】Rails 4 RoutingError: ルートが一致しない[POST]。
-
[解決済み] Ruby on rails "No route matches" (ルートに一致するものがない)。
-
[解決済み] Railsマイグレーションを利用してカラムをドロップする方法
-
[解決済み] Railsです。gemを使った特定バージョンのライブラリのアンインストール
-
[解決済み] レイルズ・ジェネレート」を逆手に取る方法
-
[解決済み] Ruby on Railsのマイグレーションでデータベースのカラムの名前を変更するにはどうすればよいですか?
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] Ruby on RailsでJSON出力を "きれい "にフォーマットする方法
-
[解決済み] Ruby/RailsでHashからキーを削除して残りのHashを取得する方法は?
-
[解決済み】Rails :dependent => :destroy VS :dependent => :delete_all
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ActionController::InvalidAuthenticityTokenについて
-
[解決済み】Webpacker::Manifest::MissingEntryError【クローズド
-
[解決済み] nil:NilClass の未定義メソッド `each'... なぜでしょうか?
-
[解決済み] デバイスを使用する現在のユーザーメソッド
-
[解決済み] erbでコメントを追加する最適な方法
-
[解決済み] rspec 3 - クラスメソッドをスタブ化する
-
[解決済み] railsでhidden fieldタグを使用する方法
-
[解決済み] Ruby:Rubyの配列にinclude.の反対はある?
-
[解決済み] gemのアップデート後、"Asset was not declared to be precompiled in production "でテストが失敗する。
-
[解決済み] Heroku Error R14 (Memory quota exceeded): How do I solve this?