問題タブ [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.

0 投票する
1 に答える
255 参照

ruby-on-rails-3 - 関連付けられた「子」モデルで STI を使用する ActiveRecord::Association メソッドの使用

スーパークラス (モデル) Measurement と、WeightMeasurement と LengthMeasurement の 2 つのサブクラスがあります。

次に、WeightMeasurements と LengthMeasurements と同じ数の Person クラスを取得しました。

問題は、人の新しい測定値を作成するときに、重量と長さの両方の測定値を処理する共有コントローラーを使用したいということです。

ただし、私が一般的に Person の測定値を構築する方法は、親 (Person) を介してそれらにアクセスすることです。person.weight_measurement.build のように。問題は、ここに何を入れたらよいかわからないことです... person..build ?

0 投票する
1 に答える
701 参照

ruby-on-rails - 継承階層を使用するときに親コントローラー内で正しいアクションをレンダリングする - Rails

この単一のテーブル継承階層を持つコード ベースを使用しています。

BlogEntryWizardController < BlogEntriesController < CommonEntryController < ApplicationController

BlogEntryWizardController (BEWC) は、BlogEntriesController (BEC) が使用するのと同じモデルを使用します。BEWC と BEC の唯一の実際の違いはビューです (一方はもう一方のチュートリアル ウィザードです)。ウィザード内でフォームを送信すると、ユーザーは親である BEC の「表示」アクションに移動し続けます。これは、CommonEntryController (CEC) 内で発生します。

これは BEC の show メソッドを呼び出しますが、BEWC 内でオーバーライドされた show メソッドを呼び出す必要があります。どの「表示」アクションを適切に呼び出すかを CE 内で区別する方法はありますか?

あなたの2セントをありがとう。

0 投票する
1 に答える
127 参照

ruby-on-rails - RoR:クラスが動的に決定されるコントローラーでオブジェクトを作成するにはどうすればよいですか?

私のアプリにはSTIモデルがあります:

およびSTIをサポートするスキーマ:

MeteredServiceはネストされたリソースです(ただし、この質問にはあまり関係ありません)。

これが取引です。MeteredServiceを作成するには、ユーザーはプルダウンリストで多くのサブクラスの1つを選択します。このフォームは、クラス名を文字列としてMeteredServicesController#createに返しparams['metered_services']['class']ます。次に、適切なサブクラスを作成する必要があります。

私が取っているアプローチはうまくいきます-ある種-しかし、これが最善の方法であるかどうか疑問に思っています:

私が行っているのは、クラス名を削除してparams['metered_service']、残りのパラメーターを使用して従量制サービスを作成できるようにすることです。そして、class_nameは(を介してObject.const_get)クラスに解決されるので、そのクラスで.newメソッドを呼び出すことができます。

MeteredServices.descendants()開発モードでキャッシングが行われる方法のために、呼び出しがあります。それは機能しますが、それは本当に醜いです-私がそれをしている理由の説明については、この質問を参照してください。

これを行うためのより良い/より信頼できる方法はありますか?

0 投票する
1 に答える
689 参照

ruby-on-rails - Rails - 単一テーブルの継承の問題。解決策/代替案

私のプロジェクト管理アプリケーションでは、現在、単一テーブルの継承を使用して、次のことを行っています。

リード < 要件

プロジェクト < 要件

つまり、リードは要件であり、プロジェクトは要件です。この2つしか持っていなかったので大丈夫でした。そしたらまた似たようなもの(Tender)があったので作成しました

入札 < 要件

ここでの問題は、入札がプロジェクトに変換されたときに、どのプロジェクトが入札で、どのプロジェクトがリードであったかを識別する方法がないことです。したがって、たとえば次のようには言えません。

100 件のリードから 20 件のプロジェクトを獲得し、100 件の入札から 5 件のプロジェクトを獲得しています。

今のところ回避策として、ブール値フィールドを使用して、これが入札かどうかを判断できると思います。しかし、それは性感染症の目的を無効にします。STI 自体を使用してこれを行う別の方法はありますか。または、これを達成する唯一の方法はブール値[またはある種のカテゴリ/プロジェクトタイプフィールド]です。

これに state_machine を使用できますか?

私はしばらくの間、これを正しくしようと試みてきました。どんな助けでも素晴らしいでしょう。

0 投票する
1 に答える
352 参照

ruby-on-rails-3 - Rails 3: STI を使用するか、追加の列を使用する必要がありますか? (アドバイスを求めて)

私は STI を使用する必要があると思われるプロジェクト (Rails 3.0.3) に取り組んでいますが、テーブルに余分な列を追加するだけでよいかどうかわかりません。

私のオブジェクト モデル (ゲーム システムの場合) には、プレイヤー (エージェンシーに所属する) と所有者 (エージェンシーを所有する) がいます。

プレーヤーと所有者の両方がユーザー アカウントであるエージェントによって所有されるため、エージェントは多くのエージェンシーでプレーヤーおよび/または所有者になることができます。

代わりに、エージェントの名前を「ユーザー」にするべきでした。おっと。だから私はこれを持っています:

Player と Owner はどちらもまったく同じ属性を共有します。両者の唯一の違いは、Owner と Player の関係が異なることです (Owner は Agency を所有し、Agency には 1 人の Owner しかいませんが、多くの Player がいます)。

さらに、所有者には、代理店の設定を調整する機能などの特別な権利が与えられます。

純粋な OOP の観点から見ると、Owner は Player のサブクラスです (または、Owner と Player は両方とも Participant などの未定義クラスのサブクラスです) が、永続性を考慮すると、別々のプレーヤーと所有者のテーブルを持つデータベース設計は貧弱に思えます.

私が最初に考えたのは、STI をリファクタリングして採用し、Owner を Player のサブクラスにするか、新しい基本クラスを導入してから、Owner と Player の両方をサブクラス化することでした。

もう 1 つの考えは、is_owner という名前の boolean/tinyint 列を Player に追加するだけでよいというものでしたが、それが厄介なビューとコントローラー コードにつながる可能性があることは予測できます。

誰かが同様の状況に遭遇したことがあり、アドバイスを持っているか、STIについて読むための優れたオンラインリソースを教えてくれるかどうか疑問に思っていましたか?

0 投票する
1 に答える
284 参照

ruby-on-rails-3 - STI を使用した Rails 3 でのモデルとコントローラー間の相互作用

ユーザーが「アクション」のリストを持つRails 3を使用してWebソリューションを実装しています。それらは保留中または検証済みのいずれかであり、管理者のみが検証できます。

2 つの典型的なアクションは次のとおりです。

1/ 間違った写真を報告する (管理者が確認した場合、写真は削除されるため ID が必要です) 2/ 新しいカテゴリを送信する (管理者が確認した場合、カテゴリが追加されます)

各アクションには、ユーザーの評判に向かう特定の数のポイントがあり、これが継承の良い候補になります (検証の最後に共有される動作、子の特定のフィールドとメソッドの実装)。

写真を削除する (1/) か、新しいカテゴリを追加する (2/) モデルに「onValidate」メソッドを含めることを計画していましたが、それをモデルに入れるのは奇妙に感じます。

そのデザインを強化してコントローラーに移動する方法を教えてください。

0 投票する
1 に答える
5081 参照

ruby-on-rails - ActiveRecord をサブクラス化し、db fetch 後にサブクラスを維持する

さまざまな種類のメディア ( 、、 )Mediaについて同様に構造化された情報を格納できるActiveRecord モデルがあります。ただし、これらのサブクラスにはそれぞれ固有のメソッドがあります。Media::BookMedia::MovieMedia::Music

を使用すればこれは機能Media::Book.new("Harry Potter").reviewsしますが、使用できるようにしたいです

これを実現するために使用する必要があることはわかってmedia_typeいますが、すべての ActiveRecord データベース インターフェイス メソッド ( User.mediasfindfind_by_etcwhereorder、 ) をオーバーライドしてlimitallそれぞれの戻り値を置き換えるよりも良い方法があるかどうかはわかりません。

0 投票する
1 に答える
125 参照

ruby-on-rails - 性感染症が意味をなすのはいつですか? すべてのタイプに同じ情報を保存していますが、使用方法は異なります

ですから、性感染症がこれまでで最も非難されていることは知っていますが、実際には理にかなっているかもしれないと思う例があります. 私のアプリは、さまざまな種類の xml ファイルを解析しています。すべてのファイル モデルは、まったく同じ情報を格納します。どのユーザーに関連付けられているか、いつアップロードされたか、S3 のどこに保存されているかについての情報です。

xml ファイルが保存されたら、それを解析して情報を取得し、それを使用して他のさまざまなモデルを作成します。ファイルの種類ごとに、さまざまなものが作成されます。100 以上の異なる種類の xml ファイルが存在する可能性がありますが、それほど多くのパーサーを作成するつもりはないと思います。この場合、STIは意味がありますか?

私が推測する欠点は、モデルがすべて1つのディレクトリにあるため、Railsをハックしてモデルディレクトリのサブディレクトリに貼り付けない限り、そのディレクトリがあふれてしまうことです。

もう 1 つのオプションは、kind フィールドがあり、これらすべてを処理する lib ディレクトリに何かを配置することです。または、resque を使用しています。おそらく、すべての xml ファイル パーサーが独自のジョブである必要があります。Railsコンソールでジョブを強制するのはちょっと面倒ですが、これには欠点があります。

0 投票する
0 に答える
134 参照

ruby-on-rails - サブクラスを to_xml に含める

次の問題: データベース モデルの xml ドキュメントを生成しています。STIによる遺伝。

私のモデル:

呼び出す XML を生成するにはEntity.to_xml(:skip_instruct => true, :include => Entity.xml_includes)

エンティティでは、self.includes次のようになります。

Propertyこれは現在機能していますが、は から継承するクラスと同じ関係を持たなければならないため、単なる回避策のようPropertyです。

私が探しているのは、現在のプロパティが anAttributeまたは aRelationshipであるかどうかを調べ、対応する関係を含めるアルゴリズムです。

0 投票する
1 に答える
146 参照

jquery - クライアント側の検証とSTI

client_side_validationsgemを使用しています。これをSTIで機能させることをどのように提案しますか?

出力: