問題タブ [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 - Rails:この問題には、単一のテーブルが適切な設計上の選択ですか?
私は最近Railsアプリケーションを継承し、今後のアーキテクチャ上の決定について議論しています。ここに少し背景があります...フィードバックをいただければ幸いです。
現在、16種類の広告タイプがあり、すべて同じ属性のセットがあり、いくつかは1つまたは2つの追加属性があり、いくつかは3つまたは4つの属性があります。
現在、各広告タイプには、それぞれの列を持つ個別のモデルとテーブル、および基本的なCRUDにも使用されるCMS内の個別のコントローラーとビューがあります。CMSはinherited_resourcesを利用するため、重複の一部が制限されます。
私は属性セットを書きました-すべての広告タイプをカバーする20かそこらがあります。特定の広告タイプには関連付けがあります。いくつかのhas_many関連付けでは、外部キーが関連付けられたテーブルに格納され、いくつかはbelongs_toになります。
広告には実際の動作はありません。特定の広告タイプはさまざまなページに表示されるだけなので、特定のタイプの広告があるかどうかを判断できる限り、私たちは黄金色です。
単一のモデル、テーブル、コントローラーに移行することを検討していますが、これが1)問題に適しているかどうか、2)パフォーマンスの問題があるかどうか、3)可能性があるかどうかについて、stackoverflowコミュニティからできるだけ多くの情報を入手したいと考えています。私が考えていないプログラミングのボトルネック。これが私のこれまでの考えです...
ルート/:location /:ad_type / new(例:/ homepage / ad_type_1 / new)を想定します。
ad_controllerは、ad_typeをparams [:location] + params [:ad_type]に設定して@adを作成し、指定されたad_typeに適切なパーシャルを表示するための一連の条件を含む新しいビューをレンダリングします。[送信]を実行すると、広告タイプに定義された期待される属性を使用して広告を作成する作成アクションが実行されます。この場合、その1つはad_type=homepage_ad_type_1になります。
データの取得についてはあまり考えていませんが、ad_type列が正しく設定されていれば、ad_type列に基づいてレコードをプルする「of_type」スコープを作成できるはずです。何かが足りないかどうかわかりません。
検証は、ad_type値によって異なります。
いつでもいくつの広告が存在するかは完全にはわかりませんが、後で対処できると思います。古い行の一部をad_archivesテーブルなどに移動することによって。
あなたの考えは大歓迎です。ありがとう。
ruby-on-rails - RailsSTIの基本クラスからの条件付きサブクラス化
基本的に、写真とビデオの2種類のアセットを持つエンティティがあるプロジェクトを開発しています。
すべてのアセットを同じテーブルに配置し、PicturesまたはVideosのいずれかに対して単一のアップロードフォームを作成する必要があるため、Assetクラスの子孫であるPictureとVideoの両方を持つ単一テーブル継承を使用しています。また、ビデオか画像かに応じて、さまざまな検証/コールバックを実行します。
私はペーパークリップを使用してアップロードプロセスを処理しています。ファイルをアップロードしてアセットを作成するときに、アプリケーションはアップロードされたファイルのmimeタイプに応じて正しいサブクラス(画像またはビデオ)をインスタンス化するという考えです。 。
これは私のクラスのスケッチです:
私の考えは、 Assetbefore_saveクラスにコールバックを実装し、そこで正しいクラスをインスタンス化しようとすることですが、それを行う方法や、それが良い考えかどうかはわかりません。
これについて何か考えはありますか?
routing - レール3の問題に対するstiとform
これはSTIやform_forの問題に似て いますが、そこで与えられた答えはRails 3ではうまく機能せず、非推奨の警告を出します。ただし、新しい構文を使用しようとすると、非常に紛らわしい結果になります。ここに問題があります。
event_enquiryは一種の照会であり、古い構文では
これにより、予想されるパス/ event_enquiries / 1 / build_provider_versionsが生成され、ログに、2010-12-2222:00:11+0000に127.0.0.1の開始POST"/event_enquiries / 1/build_provider_versions"が表示されます。
しかし、これは非推奨の警告を出します
しかし、新しい構文ですが
同じルートを生成しているように見え、ログにまったく同じメッセージが表示されます。2010-12-2222:01:58+0000に127.0.0.1のPOST"/ event_enquiries / 1/build_provider_versions"が開始されましたルートが存在しないようです!!
ActionController :: RoutingError(「/ event_enquiries / 1 / build_provider_versions」に一致するルートはありません):
私はこれを行ったり来たりしていて、何が起こっているのかわかりません。誰かが何が起こっているのか手がかりを持っていますか?
明らかに、今のところ古い構文に戻って満足していますが、ここで何かが壊れているという不快な気持ちがあります...それとも私はただ愚かですか?
model - Railsで「予定」をモデル化する方法は?
私が直面しているシナリオは次のとおりです。
予定は次のようにスケジュールできます。
- 今日
- 週のある時間
- 特定の日に
そのため、アポイントメントの「タイプ」ごとに属性が異なる場合があります。
これらのモデルを STI で使用することを考えていましたが、正しい軌道に乗っているかどうかはわかりません。
テーブル:
これをモデル化する最良の方法は何ですか?
これは単一テーブル継承の良い候補ですか?
アップデート
これまでのところ、@Mike、@SpyrosPの助けに感謝します。以下のオプションを思いつきました。
これらは、データベース テーブルの「ビュー」であり、どのように見えるかです。
どれが最も適切だと思われますか?
ruby-on-rails - Rails STI 検証の継承
Rails アプリケーションに STI モデルがあります。validates_...祖先モデルには、正常に機能しているメソッドの検証があります。
しかし、カスタム検証も行っており、子孫にさらに異なるカスタム検証を追加したいと考えています。これらのカスタム検証は、クラスによって異なります。
私が書くなら
元の検証を上書きするだけなので、元の継承された検証は失われます。
Railsでこれを行うための規則はありますか?
ruby-on-rails - RailsSTIと「タイプ」文字列の設定
RailsでSTIを使う必要があると思います。
これが私のクラスです:
そして、peopleテーブルには:type文字列である列があります。
したがって、表に表示されるのは、Personであるすべての行のタイプが「Person」に設定され、すべての家主のタイプが「Landlord」に設定されていることです。しかし、それは私が見ているものではありません。各家主のタイプは「家主」に設定されていますが、すべての人のタイプはnilに設定されています。これはレールが機能する方法である可能性が非常に高いですが、私はいくつかの確認を探していました。
ruby-on-rails - Rails:クラスメソッドを使用して子クラスに関する属性を返すときに、子クラスが読み込まれないのはなぜですか?
こんにちは私はしばらくの間これの解決策を探していました。Rails2.3.5の使用
いくつかの子クラスを持つ親クラスがあり、1500行の長さのファイルがないようにするために、子クラスをapp/modelsディレクトリのサブディレクトリに保持しています。
私がこの投稿を見た最近まで:ここ
子クラスをロードすることすらできませんでした
ここで、次のようなself.inheritedクラスメソッドを使用する方法で各子にアクセスします。
一時的に、物事がどのようにロードされているかをよりよく理解するために、いくつかのデバッグステートメントを配置しました。コンソールを起動して、この動作に気づきました。
子クラスをすべて1つの巨大なファイルに戻すなど、これに対するあまり洗練されていない解決策があると確信していますが、可能な限りこれを避けたいと思います。
ありがとう
ruby-on-rails - データベースに「余分な」列を含めるための STI およびサブクラスの拡張?
性感染症は私が望んでいるものではないかもしれません。私はあらゆる提案を受け入れますが、この質問のために、次の現実世界の状況を想定してみましょう。
さまざまなメール ベンダーの API データをアプリに格納する必要があります。STIを使用すると、次のモデルがあります
それでは、いくつかのコンソール アクションをプルアップしましょう。
では、API キー設定を追加します。MailChimp は api_key を使用するだけです。Aweber は api_key と署名を使用する場合があり、Postageapp は、たとえば、api_key とトークン システムを使用します。
各サブクラスを拡張して、データベースに必要な列を含めますか? STI をまとめて廃棄し、通常のクラスにMailChimp、AR から継承した、 とだけ言わせますか?
STI の理由は、すべてのユーザーが MailSetting を持っていることを知っているからです。これは、時間の経過とともに拡張される可能性のあるタイプです。ただし、これらのサブクラスをこのように拡張するのは面倒だと思います。そのためuser.mail_setting.connect、それらがどのサブクラスからのものであるかを知らずに、次のようなことを行うことはできません。そして、これらの人を接続するために何が必要でしたか?
考え?
mysql - MySQL 複合インデックスでのキーの効率的な順序付け (WRT Rails ポリモーフィック アソシエーションと STI)
以前、私はActiveRecord のポリモーフィックな外部キーの複合インデックスについてこの質問をしました。私の質問の基礎は、インデックスは列のカーディナリティに基づくべきであり、Rails の STI タイプおよびポリモーフィック _type 列のカーディナリティは一般的にかなり低いという私の理解でした。
私の質問に対する答えが正しいことを受け入れる - それは、カーディナリティの高い _id 列とカーディナリティの低い _type 列の両方にインデックスを付ける価値があるということです。インデックス?
[owner_id, owner_type] のインデックスはカーディナリティの高いフィールドを最初に配置し、[owner_type, owner_id] はカーディナリティの高いフィールドを 2 番目に配置します。前者のキーを使用したクエリは、後者のキーを使用したクエリよりもパフォーマンスが高いですか、それとも同じですか?
これは、STI モデルを提供するテーブルの複合キーを注文する方法に特に関係があるためです。STI Rails finder は、ほとんどの場合、type 列に対してクエリを実行します。これもまた、カーディナリティが一般的に低い列です。したがって、型列は他のインデックスよりも頻繁にクエリされます。型列がより頻繁にクエリされる場合は、型先行インデックスを使用するのが理にかなっている可能性があります。これは、特定性の低いクエリがインデックスの最初の部分を利用してパフォーマンスを向上させる可能性があるためです。ただし、非常に具体的なクエリのパフォーマンスが低下することは、それほど大きなメリットではありません。インデックスのカーディナリティの高い部分を利用します。
ruby-on-rails - レール 3 を使用したマルチ テーブルの継承
Rails 3 での複数テーブルの継承に関して、標準やベスト プラクティスはまだありますか? これまでのところ、私が見つけることができた最高の記事は次のとおりです。
http://mediumexposure.com/multiple-table-inheritance-active-record/
しかし、それでもいくつかの変更が必要でした (たとえば、以前の /config/environment.rb ではなく、require を初期化子に移動するなど)。
より良いリソース/基準はありますか?