2016-06-29 10 views
0

からtypeフィールドをしたいです。私は子モデル<code>Teacher</code>と<code>Student</code>などのための単一テーブル継承を実装するために期待どおりに動作基盤となる<code>type</code>列で<code>User</code>モデルを持っている私のSTIモデル

個々のレコードを引き出すためにUser.findを呼び出す対応するRailsコントローラがありますが、STIはうまく機能しています。正しいデータが入ったモデルオブジェクトが正しくタイプされています。

しかし、typeフィールド自体がデータベースの行から抽出された値から除外されています。ほとんどの時間は、実際のオブジェクトのクラスまたはタイプがある:これはデフォルトではありませんなぜ私が手

{ id: 3, name: "Jane Doe", type: "Student" }, 
{ id: 7, name: "Jane Clark", type: "Teacher" } 

:私は私のデータは次のようになりますUser.findの結果に含まれている希望しますどのような種類のUserをあなたが見ているのかを伝える最も良い方法です。しかし私の目的のために、型情報はJSON翻訳で失われています。私は消費者アプリケーションで直接使用しているので、このリテラル形式で送信することをお勧めします。

したがって、私の質問は次のとおりです。typeフィールドの出力をUser.findのままにしておくことは何ですか? typeをもう1つの通常のデータフィールドに見せるように、私はそれを上書きするために何ができますか?

答えて

0

ここでは問題はありません。

回避策は、すべての子モデルのパブリック属性にリテラルタイプを名前で渡すか、他のタイプ固有の情報を渡すかを隠すことです。例えば、私の目的のために

def classProperty 
    'Student' 
end 

は、呼び出し元のコントローラにこの情報を取得し、JSONized応答に挿入するためのコードを扱う通常のRubyのデータを使用するには十分です。

しかし、typeの列が私のモデルに表示されないメカニズムや、このような場合にどのように克服できるかについては、まだ不思議です。

関連する問題

 関連する問題