問題タブ [nested-attributes]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - :allow_destroy => true の場合、オブジェクトを破棄する代わりに関連付けを削除します
accepts_nested_attributes_for
ActiveRecord でnewを使用する場合、 オプション を使用できます:allow_destroy => true
。{"_delete"=>"1", "id"=>"..."}
このオプションが設定されている場合、渡されたようなネストされた属性を含むハッシュはupdate_attributes
、ネストされたオブジェクトを削除します。
簡単なセットアップ:
質問:ネストされたオブジェクトを削除する代わりに、関連付けを削除するにはどうすればよい"_delete" => "1"
ですか? (つまり、上記の場合、ユーザーの forum_id を nil に設定します)
おまけの質問:関連付けを削除するときに、ネストされたオブジェクトの属性も変更したい場合はどうすればよいですか? (状態やタイムスタンプの設定など)
ruby-on-rails - ActiveRecord::AutosaveAssociation.marked_for_destruction へのアクセス方法は? 親モデル内から
次の関連付けを持つモデル Person があります。
カスタム検証は現在、失敗すべきではない場合 (一部の検証が破棄対象としてマークされている場合) に失敗します。これは、Person およびそのディストリビューションが保存されます。
ActiveRecord::AutosaveAssociation.marked_for_destruction?
バリデーター内で使用して、破棄されようとしているディストリビューションを無視したいと思います。
どうすればその方法に到達できますか? Distribution (通常の Rails モデル) とそのクラスとの関係がどのようなものかはよくわかりません。
これは恐ろしい汚れたハックですか?少し汚れているだけで、問題に対する最も正確な修正です。
デバッガーで ActiveRecord のソース コードを調べて、レコードが実際に破棄対象としてマークされていることを確認しました (つまり、Javascript またはフォーム ビルダーのバグではありません)。
ruby-on-rails - nested_attributes を使用した before_add コールバック
以下を考えると:
Foo has_many :bars, :through => :baz
と
Foo accepts_nested_attributes_for :bar
find_or_create_by_name
新しい を追加するときにを実行したいのですが、:bar
どこに何らかのbefore_add
機能を追加できるかわかりません。
この質問の背景は、既存のものを使用しBar validates_uniqueness_of :name
て新しいものを作成しようとするとエラーが発生することです。Foo
Bar
ruby-on-rails - HABTM 二重ネスト fields_for
私が仕事をすることができないコードの興味深い部分。私は次のモデル/関係を持っています (不要なコードを除く)
このすべての情報を表示するフォーム:
そして、送信を処理するコントローラー:
HTMLはきれいに見えます:
送信されたパラメーターは次のようになります。
「未定義のメソッド 'service_subtype' for #」エラーが返され、HABTM モデル間の結合テーブルだけが更新されません。これを解決する方法、または舞台裏で何が起こっているのか考えていますか? この手順の背後で起こっている「魔法」を理解して、それが機能していることを確認できるかどうかはわかりません。ほとんどの人は、HABTM はネストされた属性では機能しないと言っているようです。そうらしい。回避策はありますか?
ruby-on-rails - ネストされた属性コレクションを更新した後、ActiveRecord::Base.reload を呼び出す必要がありますか?
関連するコレクションに新しいアイテムを追加すると、結果の変更を確認するために foo.reload を呼び出す必要がないことがわかりました (スクリプト/コンソールでうろついています)。
素晴らしい。しかし、コレクションからアイテムを削除する場合、コレクションに変更が反映される前に foo.reload を呼び出す必要があります (save の呼び出し後に DB に表示されます)。
これは正常ですか、それとも関連付けの更新で少し間違ったことをしていますか?
ruby-on-rails - ネストされた属性とコントローラーを介した属性の追加?
この質問を説明するのは難しいので、それが私が思いつくことができる最高のタイトルなので、ここにいくつかのコードがあります.
親、子、孫の 3 つのモデルが与えられます。
Parent#new で作成される子レコードと孫レコードの両方に current_user.id を追加したいと思います。隠しフィールドを追加する良い方法が見つからなかったため、今のところ隠しフィールドを使用しています。
作成時に current_user.id を追加するコールバックを作成することで、誰かが助けてくれるでしょうか? とにかく、それをモデルに入れることはあまり運がありませんでしたが、あなたは頭がいいです。
考え?
ruby-on-rails - Ruby on rails - ネストされた属性: ネストされたモデルを検索または作成する方法
Bill
ネストされたモデルを持つモデルがありCustomer
ます。モデルには、Customer
一意性が検証された電話番号があります。請求書の作成中に、電話番号に基づいて既存のレコードを取得するか、存在しない場合は新しいレコードを作成します。ある意味どうすればいいのRESTful
?
ruby-on-rails - activerecordのネストされた属性のbefore_updateコールバックで新しい子を処理する方法
別のモデルオブジェクト(子)にhas_manyアソシエーションを持つモデルオブジェクト(たとえば親)があります。
親では、before_updateコールバックにコードを追加して、その子に基づいて計算された属性を設定します。
私が遭遇した問題は、メソッドParent.update(id、atts)を使用して、新しい子のattsを追加すると、attsコレクションに追加されたものがbefore_update中に使用できないことです(self.childrenは古いコレクションを返します) 。
accepts_nested_attributes_forをいじらずに新しいものを取得する方法はありますか?