問題タブ [polymorphic-associations]
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.
sql - 複数のテーブルの 1 つを指す外部キー制約
source_id
値が別のテーブルの主キーである必要がある1つの列を持つテーブルがありますが、どのテーブルであるかはレコードごとに異なります。すべてのレコードsource_table
には、ソース レコードのテーブルを指定する の値とsource_id
、ソース テーブルの行を指定する の値が必要です。
DB の外部キー制約と検証を利用するためにこれを達成する方法はありますか? または、検証ロジックをアプリケーション層に移動する必要がありますか? あるいは、この問題を回避できる別の設計はありますか?
ruby-on-rails - Ruby: Declarative_authorization ポリモーフィック アソシエーション
2 つのモデル (アイテムとテーマ) があります。これらは両方とも、has_many 関連付けを持つ 3 番目のモデルのユーザーによって所有されています (ユーザーは多くのテーマとアイテムを持っています)。Item と Theme の両方に have_many :images があります。
Image モデルは多態的な関連付けであるため、テーブルには列 imageable_id と imageable_type があります。ID 1 のアイテムと ID 1 のテーマの両方がある場合、テーブルは次のようになります。
declarative_authorization を使用してデータベースの SQL クエリを書き直し、ユーザーがアカウント外のアイテムにアクセスできないようにしています。ユーザーが所有するアイテムを読み取ることができる場合にのみ、ユーザーが画像を読み取ることを許可する承認規則を作成したいと思います。正しい構文を取得できないようです (おそらくサポートされていません):
次に、上記を模倣する別のルールがありますが、テーマ用です。
何か案は?前もって感謝します!
- コリス・マリン
ruby-on-rails - ここでポリモーフィックな関連付けは適切ですか?
これが私が考えていることです:
これは完全に間違っていると確信しています。私がやろうとしていることは、ポリモーフィックな関連性が示されているのを見たのとは逆のようです。たとえば、Railsガイドから:
ここで、「所有」モデル(製品または従業員)は、多くのクラスの1つになります。「所有」モデルを多くのクラスの1つにしたいと思います。これらはすべて、別のクラスから基本動作を継承します。さらに、これらのサブクラスの動作はすべて十分に異なるため、STIは非常に非効率的です。私はここでかなり迷っています...あなたが与えることができるどんな助けにも感謝します!
編集:私がやりたいことを明確にするために...私はWidgetと呼ばれる「所有」クラスを持っています。ウィジェットは、非常に単純なWebアプリに沿ったものを表します。各ウィジェットは、いくつかの異なるレイアウトの1つで表すことができます。したがって、これらの異なるレイアウトクラスを定義しています。レイアウトは、外観と動作の両方でかなり異なる可能性がありますが、いくつかの共通の機能を共有しています。このため、その一般的な動作をWidgetLayoutクラスに抽出して、そこから継承できるようにしたいと思います。結局、どのウィジェットも1つの「特定の」レイアウト(情報、OneWayCommunicationなど)に関連付けることができます。このセットアップをどのように構成する必要があるのかわかりません。
編集(最後のもの、私は願っています!):ああ、あなたの例をもう一度見て、私はそれを見る。私が見逃しているのは、レイアウトに一般的な動作を継承させることだけです。だから、このようなものはうまくいくでしょうか?:
ruby-on-rails - Rails、ポリモーフィックアソシエーションが過大評価され、制限され、不要であると考えるのは間違っていますか?
OK、それで私はSTIとPolymorphicAssociationsに関してRails3アプリを整理するさまざまな方法をいじっています。私は、コーディングと使用の両方が簡単で、将来の変更と最も互換性がある可能性が最も高い方法を見つけようとしていました。たくさんのオプションの(そしてしばしば欠けていて、不十分に書かれた)記事をたくさん読んだ後、私は自分自身のいくつかの結論に達しました。
まず、STIの使用は、コーディングが簡単で、読みやすく、使いやすく、書き直しすぎずに将来の変更に対応しやすいという点で、最も安全な方法のようです。私が見ることができる唯一の正当な欠点は、DBにデータに「穴」があることです。一部のpplは、これは悪いことだと考えています。しかし、私見、これが唯一の欠点であり、結果があなたの人生の残りの部分をはるかに簡単にすることである場合、誰が気にしますか?
第二に、ポリモーフィックアソシエーションは実際には特定の状況でのみうまく機能し、すべての状況では確実に機能しないようです。さらに、ポリモーフィックアソシエーションを使用できる状況では、STIを使用することもできます(その逆はできません)。では、なぜ多形関連を気にする必要があるのでしょうか。それらの厄介な「穴」をDBから取り除くためだけですか?しかし、次に、コントローラー、モデル、ビューなどの複数のセットは言うまでもなく、非常によく似た重複フィールドと追加のテーブルを追加します。
第三に、ポリモーフィックアソシエーションを使用する適切な時期を特定し、それを適切に実装したとしても、状況が変わる可能性があり、ポリモーフィックなものを取り除いて、とにかくSTIを実装する必要があります。私はこれが逆に起こるであろう時を見ていません。STIはどのような設定でもうまく機能するようですが、ポリモーフィックアソシエーションは、宣伝どおりに機能するために「まさにそう」である必要があるようです。
今、私は賢い人ではないので、これらは間違った方向や近視眼的な観察である可能性があります-あなたが私が間違っていると思う場合は私に知らせてください、そしてあなたのケースをサポートするためにいくつかの良い証拠を提供してください!
ruby - モデル+STI+ポリモーフィックアソシエーションに参加-ActiveRecordはこれを行うことができませんか?
質問は一番下にありますが、コードはその大部分を説明しています:)
コードのベースは次のとおりです。コードのコアに到達するために短縮されています。
そして、これはあなたがそれを使うときに起こることです:
私の質問は、関連付けられているサブクラスからその結合モデルを作成するときに、を介してではなくsubgroup.images << image
言うようにするにはどうすればよいですか?私はこれを理解することができませんでした。parent_type: "SubGroup"
Group
アップデート
ActiveRecordコアでこの1行を変更すると、完全に機能します。
...これはバグですか?
ruby-on-rails - Rails:ポリモーフィックアソシエーションのタイムスタンプに基づいて最近のアイテムを取得するためのクエリ
コメントには通常のポリモーフィックな関連付けがあります。
コメントのcreated_atタイムスタンプに基づいてBook.recently_commentedとArticle.recently_commentedを定義できるようにしたいと思います。今、私はネストされたselectでこれを行うためのかなり醜いfind_by_SQLクエリを見ています。SQLに頼らずにRailsでそれを行うためのより良い方法があるに違いないようです。
何か案は?ありがとう。
その価値については、SQLを次に示します。
ruby-on-rails - Rails でポリモーフィックな関連付けのフォームを作成する
それぞれにコメントを付けることができるクラスがいくつかあります。
新しい映画コメントのフォームを作成するにはどうすればよいですか? 追加した
私のroutes.rbに、そしてnew_movie_comment_path(@movie)を試してみましたが、これによりcommentable_idとcommentable_typeを含むフォームが得られます[ユーザーが直接入力するのではなく、自動的に入力したい]。私も自分でフォームを作成してみました:
(「テキスト」はコメントテーブルのフィールドです)しかし、これも機能しません。
コメントを映画に関連付ける方法がまったくわかりません。例えば、
ID 1 のムービーに関連付けられたコメントを作成していないようです (Movie.find(1).comments は空の配列を返します)。
ruby-on-rails - Eager Load Polymorphic has_many : ActiveRecord の関連付けを通じて?
has_many :through
Rails/ActiveRecord でポリモーフィック アソシエーションをどのように熱心にロードしますか?
基本設定は次のとおりです。
Rails 2.3.x と結合モデルでの二重ポリモーフィック アソシエーションのこのイーガー ロードの問題を解決したいと仮定すると、次の:through
ようなものでアソシエーションをどのようにイーガー ロードしますか?
それはうまくいきません、何かアイデアはありますか?
ruby-on-rails - コメントとのポリモーフィックな関連付け-RubyonRails
これらのポリモーフィックな関連付けを完全に機能させるのに少し問題があります。私はこのチュートリアルwww.railscasts.com/episodes/154-polymorphic-associationに従いましたが、新しい投稿を作成するときにパス/ controller / ID#/commentsである場合にのみ機能するようです。/ controller / ID#で部分的なコメントフォームをレンダリングしようとすると、コメントの作成時に次のエラーが発生します。
私は3つのモデルを持っています:
これが/articles/#{ID}に対する私の見解です
そして、ここに私のコメントの一部があります:
コメントコントローラのcreateメソッドは次のとおりです。
私は問題が何であるかを理解していると思いますが、問題を修正する方法がわかりません。このフォームは@commentableを探していますが、パスがネストされていない場合、@ commentableを見つけることができません(間違っている可能性があります)。
これが私のルートです:
ruby-on-rails - Rails 3 - polymorphic_path - 指定されたテーブルを作成する方法
次のフィールドを持つテーブル AuditLog があります。監査済み_タイプ
その結果、次のようなデータが得られます。写真 303 | コメント
私がやりたいことは、アイテムへのリンクを作成することなので、上記の例では:
ここに写真があります
polymorphic_path を使用しようとしていますが、エラーが発生します:「Fixnum:Class の未定義メソッド `model_name'」
使用時:
アイデア?ありがとう
以下のルークの回答に基づいたコードで更新します。
ローカル ストーリー アイテムに渡されるパーシャルでは、次のようになります。
DB 移行ファイルには、CreateNewsFeeds の次の行が含まれています。