問題タブ [sti]
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 - ruby-on-rails:単一テーブル継承を使用してモデルを作成しますか?
システムにいくつかのモデルがあります。
- ユーザーの評判
- 評判後
- 応答の評判
(SOと同様)。
したがって、それらはいくつかの基本的なコードを共有しています:
- 値のインクリメントとデクリメント
- レピュテーションが表す3つのオブジェクト(ユーザー、投稿、応答)に属するunique_id
C ++があれば、Reputation
これらの概念をカプセル化する""というスーパークラスがあります。
現在、別々に定義された3つのモデルがありますが、システムを構築するにつれて、コードの重複などがたくさんあることに気付き始めています。
STIを使用する場合はowner_id
、object_idと。になるフィールドを使用する必要がありowner_type
ます。
それで、このケースを処理する最良の方法は何ですか?
ruby-on-rails - 単一テーブルの継承 (Rails) との 1 対多の関係の問題
ActiveRecord の STI と関係に問題があります。クラスメソッドで何かを見逃したと思いますが、よくわかりません。以下は私のモデルです:
今、特定のユーザーの下にあるすべての FreeAdvertisement を見つけたいと思います。
エラーが発生します:
を使ってハックすることはできますu.advertisements.find :all, :conditions
が、それは私がやりたいことではありません。この問題を解決するのを手伝ってください。前もって感謝します。
ruby-on-rails - このSTI構造はRailsで実現できますか?
これらのモデルが欲しい:
articles
データベーステーブルの名前をではなく、にしたいと思いますabstract_articles
。(コンベンションが示唆するように)
これはRailsで可能ですか?ベースモデルに別のテーブルを使用するように指示するにはどうすればよいですか?テーブル名が規則に従わなくても、STIは機能しますか?
ruby-on-rails - ActiveRecord::Base#find は、Single Table Inheritance (STI) でレコードを返しません
アプリ/モデル
データベース/移行
スクリプト/コンソールで...
わかりましたが、コンソールを再起動した後、Bmodel は次のようなレコードを返しません。
ただし、Cmodel にアクセスした後に機能します。
Amodel は次のように機能します。
なぜこのように機能するのか誰か知っていますか?
レール: 2.3.4
ルビー: 1.8.7
OS: Ubuntu 9.0.4
ruby-on-rails - Rails STI: 子メソッドの呼び出し
私はこのようなものを持っています
したがって、オブジェクトを作成しているとき:
子メソッド (この場合) を呼び出すにはどうすればよいVideoReply::hello
ですか?
UPD: 私は非常にばかげた解決策しか想像できません:
しかし、それはクールではないと思います:)
ruby-on-rails - クラスが多すぎますか?Rails STI
私は非常に大きなRailsアプリケーションに取り組んでいます。当初はあまり継承を使用していませんでしたが、コンサルタントから目を見張るような経験があり、モデルの一部をリファクタリングすることを検討しています。
このアプリケーションには、次のパターンがたくさんあります。
これにより、ビュー、ヘルパー、およびGraphSettingモデル自体に大量の条件が発生します。これはどれも良いことではありません。
次のような構造を使用するためにGraphTypeを削除する単純なリファクタリング:
これは私にとって完全に理にかなっており、テストを容易にし、条件文を削除し、後の国際化を容易にします。ただし、グラフは15〜30個しかありません。
おそらく100に近い「タイプ」を持つ非常に類似したモデル(例として使用するのは複雑)があり、それを2倍にする可能性があります。それらはすべて、継承した関係とメソッドを持ち、一部のメソッドは他のメソッドよりも多くのメソッドをオーバーライドする必要があります。それは完璧な使い方のように思えますが、その多くはただたくさんのように思えます。
200のSTIクラスは多くの人にありますか?私たちが見なければならない別のパターンはありますか?
知恵をありがとう、そして私はどんな質問にも答えます。
ruby-on-rails - Rails、ポリモーフィックアソシエーションが過大評価され、制限され、不要であると考えるのは間違っていますか?
OK、それで私はSTIとPolymorphicAssociationsに関してRails3アプリを整理するさまざまな方法をいじっています。私は、コーディングと使用の両方が簡単で、将来の変更と最も互換性がある可能性が最も高い方法を見つけようとしていました。たくさんのオプションの(そしてしばしば欠けていて、不十分に書かれた)記事をたくさん読んだ後、私は自分自身のいくつかの結論に達しました。
まず、STIの使用は、コーディングが簡単で、読みやすく、使いやすく、書き直しすぎずに将来の変更に対応しやすいという点で、最も安全な方法のようです。私が見ることができる唯一の正当な欠点は、DBにデータに「穴」があることです。一部のpplは、これは悪いことだと考えています。しかし、私見、これが唯一の欠点であり、結果があなたの人生の残りの部分をはるかに簡単にすることである場合、誰が気にしますか?
第二に、ポリモーフィックアソシエーションは実際には特定の状況でのみうまく機能し、すべての状況では確実に機能しないようです。さらに、ポリモーフィックアソシエーションを使用できる状況では、STIを使用することもできます(その逆はできません)。では、なぜ多形関連を気にする必要があるのでしょうか。それらの厄介な「穴」をDBから取り除くためだけですか?しかし、次に、コントローラー、モデル、ビューなどの複数のセットは言うまでもなく、非常によく似た重複フィールドと追加のテーブルを追加します。
第三に、ポリモーフィックアソシエーションを使用する適切な時期を特定し、それを適切に実装したとしても、状況が変わる可能性があり、ポリモーフィックなものを取り除いて、とにかくSTIを実装する必要があります。私はこれが逆に起こるであろう時を見ていません。STIはどのような設定でもうまく機能するようですが、ポリモーフィックアソシエーションは、宣伝どおりに機能するために「まさにそう」である必要があるようです。
今、私は賢い人ではないので、これらは間違った方向や近視眼的な観察である可能性があります-あなたが私が間違っていると思う場合は私に知らせてください、そしてあなたのケースをサポートするためにいくつかの良い証拠を提供してください!
ruby - ActiveRecordSTIの削除が正しく機能しない
アクティブレコードを使用して2つのモデルを保存したいのですが、削除が期待どおりに機能しません。
- 評価にはID、名前、説明があります
- SqlEvaluationには、query_stringとdatabaseの2つの列が追加されています。
これらの2つのテーブルを使用したいのですが、eval_typ_idを使用して、使用するサブクラスを区別します。SqlEvaluationの場合は1です。
いくつかの調査の後、私は次のコードを使用しました。sql_evalの行を削除しなかった「delete」を除いてはうまく機能します。どこが悪いのかわからない?
ruby-on-rails - RailsのネストされたSTIサブクラスを動的にインスタンス化しますか?
私が次のようなクラスを持っているとしましょう:
ここで、「fruits」は、「apples」、「oranges」などのサブクラスを持つSTI基本クラスです。
次のようなバスケットでセッターメソッドを使用できるようにしたいと思います。
しかし、明らかに、次のような例外が発生します。
私が考えた回避策は次のようなものです。
ただし、これにより、Fruit STIオブジェクトがBasketクラスの前にインスタンス化されるため、basket_idキーがFruitサブクラスに保存されることはありません(basket_idがまだ存在しないため)。
私は完全に困惑しています。誰かアイデアはありますか?
ruby-on-rails - Rails: PolyMorphic または STI またはユーザー管理のための何か?
私は頭をこれに巻き付けようとして壁に頭をぶつけてきたので、どんなガイダンスも大歓迎です...
次の階層を反映するようにユーザー システムをセットアップしたいと考えています。
認証と承認を処理するためのDeviseとCanCanUser
のセットアップを備えたモデルが既にあるので、ロールを使用してユーザーのタイプを特定のアクションなどに制限する方法を知っています。
私が迷っているのは、Rails コードとデータベースの両方でこれらのサブクラスの関係を整理する方法です。上からわかるように、Agent
、Manager
、およびAdministrator
すべてが に含まれる情報を共有しますUser
が、それぞれに追加の機能とそれに関連する情報があります。
STI、ポリモーフィック アソシエーション、および自己参照アソシエーションについて読んだことがあります。
STI を使用する場合、テーブルには [ / / ] 固有の情報User
すべてのフィールドが含まれている必要がありますよね? それは私のテーブルを巨大にするでしょう、それは私が避けたいことです. 逆に、ポリモーフィックを使用する場合、他のすべてのタイプのサブクラス テーブルですべての共通情報を複製する必要はないでしょうか?Agent
Manager
Administrator
User
User
User
さらに混乱を招くことに、上記の質問に対する答えがサブクラス間の関係でどのように機能するかについて頭を悩ませることはできません (たとえば、 Manager
has_manyAgents
ですが、両方ともUser
...?? のサブクラスです)。
コードの読みやすさとデータの整合性を十分に考慮し、A が最適なアプローチであり、B またはnがなぜ最適なのかを (Rails の初心者のように) 簡単に説明する詳細な回答を通じて、誰かが私にこれをまっすぐに設定してくれることを本当に感謝しています。比較すると、この状況では適切なアプローチではなく、上記の関係を実装するためのコード例が得られます。この問題を解決したいのですが、それよりも重要なのは、なぜその解決策が機能するのかを知りたいということです!