2016-04-07 12 views
0

私はSails/Waterlineを使ってMongoDBにユーザ入力を保存していますが、フィールドのタイプが設定に依存しているため、データを保存する最良の方法を理解するのが難しいと感じています。セイルズ/ウォーターラインモデルヘルプ - 配列、jsonまたは文字列のデータをどのように保存できますか?

「surveyField」モデルは次のようである:

// SURVEY FORM FIELD DEFINITIONS 

module.exports = { 
    attributes: { 
    name: { 
     type: 'string', 
     required: true 
    }, 
    label: { 
     type: 'string', 
     required: true 
    }, 
    constraints: { 
     type: 'string', 
     enum: ['none', 'unique', 'combo', 'same'], 
     required: true, 
     defaultsTo: 'none' 
    }, 
    isRequired: { 
     type: 'boolean', 
     required: true, 
     defaultsTo: false 
    }, 
    attributeType: { 
     type: 'string', 
     enum: ['boolean', 'text', 'localizedText', 'enum', 'localizedEnum', 'number', 'money', 'date', 'time', 'dateTime'], 
     required: true 
    } 
    } 
} 

ユーザーがフォームにこれらのフィールドの任意の数を追加しますので、その形状は、彼らが選択したフィールドのタイプへの参照を含むことになります。フォームが構築されるとき、私はこの情報に基づいて各フィールドを処理/表示する方法を正確に知っていますが、そのモデルは値フィールドの型を取る必要があるため、情報を保存することはやや難しいと判明しています。

よう「surveyData」モデルが見えます:値が文字列であるかもしれないか、それはJSONかもしれない...または他の'standard data types.'

いずれかの任意の時に問題が発生

module.exports = { 
    attributes: { 
    value: { 
     **type: 'string' // THIS IS WHERE THE ISSUE IS** 
    }, 
    surveyFieldType: { 
     model: 'surveyFieldType', 
     required: true 
    }, 
    survey: { 
     model: 'survey', 
     required: true 
    }, 
    user: { 
     model: 'user', 
     required: true 
    } 
    } 
} 

これについての助けは大いに感謝されるでしょう。

** EDIT **

私も同様に検索可能に、この値が必要になります。

答えて

0

多少変更される場合があります。そして、ただの価値よりも複雑な価値観としてsurvery答えを扱う。タイプをJSON &に変更してカスタムバリデータをビルドします。

attributes: { 
    value: { 
     type: 'json' 
    } 
} 

とあなたはそれで今検索することができます

{ 
    surveyFieldType: something, 
    value: { 
     type: 'Array', 
     value: [1,2,3] 
    }, 
    survey: survey, 
    user: user 
} 

こと、それ湖作る、あなたはすべての返信の種類を平坦化されています。 value.typeに基づいて、jsonのカスタム検証ルールを作成できます。