2016-05-27 17 views
1

私は、次の表があります。私は必要なもの別のテーブルの新しい属性をシリアライザに追加するにはどうすればよいですか?

Table1 
    :name 
    :resource 

Table2 
    :FK Table1 
    :FK Other Table 
    :quantity 

そして、次のシリアライザ

class Table1 < ActiveModel::Serializer 
    attributes :id, 
      :name, 
      :resource 
end 

は、シリアライザは、それが関係を持って、そのすべての属性とTable2からquantityを返すということです。

ご協力いただければ幸いです。

答えて

1

ActiveModel::Serializer実際にここで、これをサポートしていますが、私の例では、

class Table1Serializer < ActiveModel::Serializer 
    attributes :id, :name, :resource 
    has_one :table_2, serializer: Table2Serializer 
end 

class Table2Serializer < ActiveModel::Serializer 
    attributes :id, :quantity 
end 

あるので、あなたはちょうど私がTable1(モデル)との誤解を避けるためにTable1Serializerの代わりTable1を使用ところで、それは動作します、対応するシリアライザとの関係を指定

Table2Serializerを書きたくない場合は、カスタム属性を使用できます。

class Table1Serializer < ActiveModel::Serializer 
    attributes :id, :name, :resource 
    attributes :table_2 

    def table_2 
    object.table_2 
    end 
end 

2つの方法で申し込むことができますが、上記のような関係のために、後でTable2Serializerを使用する可能性があるため、最初のオプションを優先します。

+0

私はカスタム属性を使用していますが、 'object.table_2.attributes.slice( 'id'、 'quantity')'を試してみると、 '属性'は '未定義のメソッド 'です。私が 'object.table_2'だけを使用すると、私はすべてのデータを表示します。 –

+0

Hmmm、object.table_2はアクティブなレコード、btwはtable_2のすべての属性を表示するにはobject.table_2を使用します。 –

関連する問題