問題タブ [single-table-inheritance]

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 に答える
343 参照

c# - 完全な FindAll で STI と ActiveRecordBase<> を使用する

単一テーブルの継承で汎用サポートを使用し、基本クラスの FindAll を引き続き使用することは可能ですか?

おまけの質問として、ActiveRecordLinqBase<> も使用できますか? 私はそれらのクエリが大好きです。

詳細: 次のクラスが定義されているとします。

これは、ほとんどの場合にうまく機能します。次のようなことができます。

しかし、時々私はすべての会社が欲しいです。ジェネリックを使用していない場合は、次のことができます。

それぞれの型に型キャストできる ICompany の配列を返す FindAll を記述する方法はありますか?
何かのようなもの:

それとも、一般的なサポートをすべて間違って実装しようとしているのでしょうか?

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

ruby-on-rails - レールにSTIを採用したモデルを多数編成

STI を使用する多数のモデルを作成するシナリオがあり、これを整理する最善の方法を考えています。すでに STI を使用している他のモデルがあり、モデル フォルダーにこれ以上ファイルを追加したくありません。フォルダーを作成し、そこに STI を使用してモデルを追加する方法はありますか? これが最善のように思えます。または、それらすべてを 1 つのファイルに追加することもできますが、むしろそれらを分離したいと考えています。

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

ruby-on-rails - has_many、belongs_to 関連付けおよび STI を持つモデルの ActiveRecord 検証

私は4つのモデルを持っています:

  • ユーザー
  • アワード
  • バッジ
  • ゲームウィーク

協会は次のとおりです。

  • ユーザーは多くの賞を受賞しています。
  • 特典はユーザーのものです。
  • バッジには多くの賞があります。
  • 賞はバッジに属します。
  • ユーザーには多くの game_weeks があります。
  • GameWeek はユーザーに属します。
  • GameWeek には多くの賞があります。
  • 賞はgame_weekに属します。

したがって、user_id、badge_id、および game_week_id は、賞テーブルの外部キーです。

Badge は STI モデルを実装します。次のサブクラスがあるとしましょう: BadgeA と BadgeB。

注意すべきいくつかのルール:

game_week_id fk は、BadgeA では nil にすることができますが、BadgeB では nil にすることはできません。

ここに私の質問があります:

  1. BadgeA の場合、1 回しか付与できないという検証をどのように記述すればよいですか? つまり、ユーザーは複数持つことはできません。
  2. BadgeB の場合、ゲームの週に 1 回しか授与できないという検証をどのように記述すればよいですか?
0 投票する
1 に答える
3811 参照

ruby-on-rails - Rails:単一テーブル継承とモデルサブディレクトリ

単一テーブル継承を利用するカードゲームアプリケーションがあります。、、列を持つclass Cardデータベーステーブル、およびのサブクラスの数があります(引数のためにとを含む)。cardstypeCardclass Foo < Cardclass Bar < Card

たまたま、Fooはゲームの元の印刷からのBarカードであり、は拡張からのカードです。モデルを合理化するために、次のようなディレクトリ構造を作成しました。

そして、以下を含むようにenvironment.rbを変更しました:

ただし、アプリがデータベースからカードを読み取ると、Railsは次の例外をスローします。

ActiveRecord::SubclassNotFound (The single-table inheritance mechanism failed to locate the subclass: 'Foo'. This error is raised because the column 'type' is reserved for storing the class in case of inheritance. Please rename this column if you didn't intend it to be used for storing the inheritance class or overwrite Card.inheritance_column to use another column for that information.)

これを機能させることは可能ですか、それともフラットなディレクトリ構造に運命づけられていますか?

0 投票する
2 に答える
2612 参照

ruby-on-rails - Rails で単一テーブル継承用のコントローラーを作成するにはどうすればよいですか?

ContactEmail、ContactLetter、および ContactCall がすべて継承されるモデルとして ContactEvent を使用して、単一テーブルの継承を設定しています。

しかし、ルーティングとコントローラーの作成方法に困惑しています。

たとえば、Email 型の新しい ContactEvent を作成するとします。

次の方法を希望します。

これは、Contact モデルと Email モデルからインスタンスを取得します。

内部では、 contact_event_controller が知る必要があると思います...

これがどのように機能するのかわかりません....

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

ruby - データベースのクエリ時に「type」を無視するようにdatamapperを取得する

アプリケーションに単一テーブル継承構造があり、AdminsとModsがUserクラスを拡張します。テーブルは識別子の値を使用するため、各レコードのタイプは「admin」または「mod」のいずれかです。

(ログイン時に)ユーザーを見つけることになると、私は次のように書きたいと思います:

ただし、これにより、次のようなSQLが作成されます。

これは、レコードが見つからないことを意味します。ただし、入力すると

ユーザーを取得します(管理者の場合)。

'type' IN('User')がまだ作成されているので、次のことも役に立ちませんでした。

これについて助けてくれてありがとう

0 投票する
6 に答える
24724 参照

java - 実行時にDiscriminatorValueを取得する方法

以下のクラスがあります

この

ApplicationProcessここで、実行時にのがであるかどうかを知る必要がありDiscriminatorValue AP or APSます。これはjpaによって自動的に処理されるため、この値を取得する方法はありません。

ApplicationProcessパラメータとしてasを受け取るメソッドを呼び出していますが、instanceofそれがどのタイプであるかを確認するために使用することは避けたいと思います。私が次のようなことをすることができればもっと涼しいでしょう

0 投票する
2 に答える
2192 参照

ruby-on-rails - 単一テーブル継承を使用して、複数のサブクラス間の一意性を検証します

多くのCardSetを含むCardモデルと、メンバーシップモデルを介して多くのCardを含むCardSetモデルがあります。

また、単一テーブル継承を使用した上記のサブクラスもいくつかあります。

上記のすべてが私が意図したように機能しています。私が理解しようとしているのは、カードが単一の拡張にのみ属することができることを検証する方法です。以下を無効にしたい:

ただし、GameSetsはこの動作を許可する必要があります。

どこかにvalidates_uniqueness_of呼び出しが必要だと思いますが、どこに置くかわかりません。助言がありますか?

更新1

私はExpansionクラスをsugestedとして変更しました:

これはうまくいきます!ありがとうJ.!

アップデート2

私は少し早すぎた。上記のソリューションは、拡張機能を新しいカードで更新するまではうまく機能していました。#valid?データベースで自分自身を見つけていたため、後続のチェックを誤ってfalseとして識別していました。#new_record?検証メソッドにチェックを追加することで、これを修正しました。

0 投票する
4 に答える
2823 参照

ruby-on-rails - members_to を使用した Rails オブジェクトの継承

Report と Chart の間に単純な has_many/belongs_to 関係があります。私が抱えている問題は、私の Chart モデルが子を持つ親であることです。

だから私のレポートモデルでは

そして、私の Chart モデルは親であり、Pie、Line、Bar はすべて Chart から継承されます。belongs_to :report がチャート モデルまたはチャート モデルの子のどこに属しているかわかりません。オブジェクトのタイプが「クラス」であるため、chart.report にアクセスしようとするとエラーが発生します。

#< Class:0x104974b90> の未定義のローカル変数またはメソッド `report'

チャートモデルはSTIを使用しているため、チャートテーブルのchart_type列から「性別」と言う..何が欠けていますか?

編集

私は (STI を使用して) Gender または Sex 型のオブジェクトをインスタンス化しています。うまくいけば、これはもう少し役立ちます。

私はそれが原因であると感じています

送信されたとき、実際には params[:chart] その params[:gender] または params[:sex]

0 投票する
3 に答える
1231 参照

ruby-on-rails - Rails モデルの STI 列の入力を選択するにはどうすればよいですか?

type列に単一テーブルの継承を持つモデルがあります。

<select>新規ページと編集ページにドロップダウンを提供したい:

それは私に次のエラーを与えます:

Ruby予約#type語を#class. 両方試してみました

どちらも機能しませんでした。助言がありますか?奇妙なことに、私のマシン (RVM 上の MRI 1.8.6) では正常に動作しますが、ステージング サーバー (RVM ではなく MRI 1.8.7) では失敗します。