問題タブ [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.
ruby-on-rails - Rails: 多対多のポリモーフィックな関係
更新についてはコメントを参照してください。
私はこれについて明確で率直な答えを得るのに苦労してきました。今回はそれを得られることを願っています! :D もちろん、Rails についてはまだまだ学ぶべきことがたくさんありますが、直面している問題は理解できているので、さらに助けていただければ幸いです。
- 「タスク」というモデルがあります。
- 「ターゲット」と呼ばれる抽象モデルがあります。
- Target のサブクラスの複数のインスタンスを Task に関連付けたいと思います。
- 単一テーブルの継承を使用していません。
- ポリモーフィックな関係をクエリして、Target のサブクラスの混合結果セットを返したいと考えています。
- Target のサブクラスの個々のインスタンスを照会して、関連するタスクを取得したいと考えています。
したがって、Task と Target のサブクラスとの間の多対多の多態的な関係が適切であると考えています。より詳細には、コンソールで (もちろん他の場所でも) 次のようなことができるようになります。
しかし!モデル「店舗」、「ソフトウェア」、「オフィス」、「乗り物」が存在すると仮定すると、これらはすべて「ターゲット」のサブクラスであり、関係を逆方向にトラバースすることもできます。
ポリモーフィックなリレーションシップによって暗示されるデータベース テーブルは、このトラバーサルを実行できるように見えますが、ポリモーフィックなリレーションシップの精神を打ち負かす答えを見つけようとする際に、繰り返し発生するテーマがいくつか見られます。
- 私の例を引き続き使用すると、人々は Store、Software、Office、Vehicle を Task で定義したいと考えているように見えますが、これは 1 つのタイプのモデルしか返さないため、ポリモーフィックな関係ではないことがすぐにわかります。
- 最後のポイントと同様に、タスク内の店舗、ソフトウェア、オフィス、および車両を一方向の形または形式で定義したいと考えています。ここで重要なのは、関係がサブクラス化に対してブラインドであることです。私のポリモーフは、最初は個々のサブクラス タイプとしてではなく、ターゲットとしてのみ相互作用します。Task で各サブクラスを定義すると、ポリモーフィックな関係の目的が失われ始めます。
- 結合テーブルのモデルが適切である可能性があることがわかりました。これは、Rails が喜んで廃止すると想定していた複雑さを追加することを除けば、ある程度正しいように思えます。これについては未経験でお願いします。
これは、Rails の機能またはコミュニティ全体の知識に小さな穴があるようです。うまくいけば、stackoverflow が私の答えの検索を記録できることを願っています!
助けてくれたみんなに感謝します!
ruby-on-rails - 同じモデルに複数の関連付けがあるポリモーフィックな関連付け
私が持っているポリモーフィックな関連付けについて少し混乱しています。ヘッダー画像と多くの画像を持つ記事モデルが必要ですが、単一の画像モデルが必要です。さらにややこしいことに、Image モデルは多態的です (他のリソースが多くの画像を持つことができるようにするため)。
Article モデルでこの関連付けを使用しています。
これは可能ですか?ありがとう。
sql - ポリモーフィックな Rails の関連付け (逆行?)
「ケース」モデルのレールアプリに多対1のポリモーフィックレール関連付けがあります。ケースを持つものはたくさんあるので、thing_that_has_a_case.case を実行して、それぞれのケースにアクセスします。
しかし、私は別の方法で行こうとしていますが、方法がわかりません。ケースオブジェクトにアクセスできますが、ケース化されているものにアクセスしたいです。レールにはこれを行う方法がありますか?オブジェクトのタイプごとに異なるSQL検索を行う醜いスイッチでそれを行うことができましたが、レールがより良い方法を持っていることを望んでいました. ありがとう!
ruby-on-rails - この Ruby on Rails 共通モデル パターンに名前はありますか? ポリリンク?
この共通モデルパターンには名前がないようです。
のような多くのプラグインで使用されてacts_as_taggable[_whatever]
おり、基本的に
、Tag などの特定のモデルを他のモデルとリンクすることができ
、Tag モデルにこれまで以上の belongs_to ステートメントを配置する必要はありません。
モデル (タグ)
を結合テーブルを表すポリモーフィック結合モデル (タグ付け) にリンクすることで機能します。
これにより、他のモデルを関連付けることができる自己完結型のモデルが作成されます。
(それらはhas_many
:as & a has_many :through を介して関連付けられます)
私はよく、このタイプのモデル関係を 1 つのものとして参照したいと思います。
多分それを「ポリリンクモデル」または「ポリリンクモデル」と呼んでいますか?
「ポリリンクモデルにして、コーディングしながら他のモデルに関連付ける」など。
他の提案はありますか?
acts_as_taggable
モデルの内部動作は次のとおりです。
ruby-on-rails - さまざまなエンティティとのユーザーの「友情」をモデル化する最良の方法は?
次のエンティティがあります。
- ユーザー
- 会社
- 組織
ユーザーは、ユーザー、会社、組織、および将来のパーティ オブジェクトをフレンド リストに追加できる必要があります。
私の最初のアイデアは、友人とのポリモーフィックな関係を持つ Friendship オブジェクトを次のように使用することでした。
簡素化されたフレンドシップ スキーマ:
- ユーザーID
- friendable_id
- フレンドリータイプ
私の問題は、Ruby on Rails ActiveRecord が、結合テーブルなどのポリモーフィックな関係を介した関係を介して has_many をサポートしていないことです。
最後に、以下のように、すべてのタイプ、特定のタイプなどの友達のリストを取得するために反復できる単一の結合テーブルが必要です。
User、Business、および Organization を一般的な Party クラスから継承し、関連付けを基本の Party クラスにポイントすることを検討しましたが、ORM のコンテキストでは、たくさんのジャンク フィールドが発生し、汚いように見えます。
私が知りたいのは、このエラーを回避しながら、ActiveRecordを使用して共通の結合テーブルを介して同様のオブジェクトとの1対多の関係を作成したい場合に、他の人がこのような状況にどのようにアプローチするかです:)
アドバイスをいただければ幸いです。
ありがとう!
optimization - 2つの左結合を含むこのMySQLクエリを最適化するにはどうすればよいですか?
クエリが遅くなる理由がわかりません。つまり、チーム、プレーヤー、機器、メタデータの4つのテーブルになります。プレーヤーと機器のレコードにはチームへのFKがあり、チームはプレーヤーと機器の親になります。そして、これら3つのテーブルの行すべてに、作成日、作成者のユーザーIDなどを格納するメタデータのレコードがあります。
一度に取得したいのは、作成日の順に、特定のチームに属するプレーヤーと機器のレコードです。メタデータテーブルから開始し、metadata_id FKを介してプレーヤーテーブルと機器テーブルを左結合しますが、特定のチームのレコードのみを取得するようにSELECTをフィルター処理しようとすると、行が多い場合にクエリの速度が大幅に低下します。
クエリは次のとおりです。
速度の低下を実際に確認するには、テーブルごとに約10,000の行を追加する必要があります。私が理解していないのは、たとえば、「... AND player.team_id = 1」のように、一方のテーブルのwhere句だけでフィルタリングすると、本当に速い理由です。しかし、もう一方を追加して「.. 。AND(player.team_id = 1 OR Equipment.team_id = 1) "これには、はるかに長い時間がかかります。
テーブルとデータ型は次のとおりです。それほどではないが、大いに役立つと思われることの1つは、metadata_idとteam_idのプレーヤーと機器のキーを組み合わせたものであることに注意してください。
Please note that I realize I could easily speed this up by doing a UNION of two SELECTS on player and equipment for a given team id, but the ORM I'm using does not natively support UNION's and so I'd much rather try and see if I can optimize this query instead. Also I'm just plain curious.
ruby-on-rails - Railsのポリモーフィックな関係とlink_to
これが私のスキーマです
link_to を使用して、Menu ビューでポリモーフィック クラスにリンクしたい。
これは機能しますが、リンクを生成することだけが必要な場合に、データベースからメニュー可能なオブジェクトを取得します。メニューが大きいと、アプリケーションが本当に動かなくなることは想像に難くありません。
menuable フィールドをポリモーフィックとして宣言すると、Rails によって menuable_type と menuable_id が作成されました。多態的なページへのリンクを生成するには、巨大な switch ステートメントを使用してヘルパー関数を記述する以外に、何を使用できますか (たとえば、多数のメニュー可能な「サブクラス」がある場合)。
mysql - MySQL 複数選択
content_id と type 列を保持するインデックステーブルがあります。(例: content_id=1、type=audio、content_id=1、type=video) 適切なテーブル (テーブル: contentvideo、contentaudio) から content_id に基づいて適切なデータを取得することは可能でしょうか?
ruby - 関連付けのある Ruby ActiveRecord オブジェクトの作成
アドレスを持つ個人とチームがあります (ポリモーフィック アソシエーション)
コードで人物と住所を別々に作成する必要があります。
person = Person.new
address = Address.new
次に、次のようなものを使用してそれらをリンクします。
person.addressable.push(address)
最後に、次のようにします。
person.save!
ただし、これにより、予期しないときに You have a nil object! が返されます。nil.has_key の評価中にエラーが発生しましたか?
誰かが私が何をする必要があるか教えてもらえますか? これをデモするコードは Google にほとんどなく、私が見つけたのは API リファレンスだけでした。