Bookshelf を使用してかなり単純な RESTful API を作成しており、underscore_database_columns を使用しているときに一貫したキャメルケース形式を返したいと考えています。
format
データを除いて、ドキュメントのメソッドとメソッドを使用しparse
てこれを正常に実行していwithPivot
ます。
すべてのコードは私のプロジェクトから単純化されているため、構文エラーなどはご容赦ください。実際のコードには存在しない可能性があります
私は2つのモデルを持っていRecipe
ますIngredient
.
var Recipe = BaseModel.extend({
tableName: 'recipe',
defaults: { name: null },
ingredients: function () {
return this
.belongsToMany('Ingredient')
.withPivot(['measurement', 'sort_order']);
}
}));
var Ingredient = BaseModel.extend({
tableName: 'ingredients',
defaults: { name: null },
recipes: function () {
return this
.belongsToMany('Recipe');
}
}));
私は次のように問い合わせています:
Model
.forge({
id: 1
})
.fetch({
withRelated: ['ingredients']
})
.then(function (model) {
return res.json(model.toJSON());
})
.catch(function (err) {
return done(err);
});
どちらが返されますか:
{
"id": 1,
"name": "Yummy Thing",
"ingredients": [
{
"id": 1,
"name": "Food Stuff",
"_pivot_ingredient_id": 1,
"_pivot_recipe_id": 1,
"_pivot_measurement": "Loads",
"_pivot_sort_order": 1
}
]
}
ご覧のとおり、データは属性ではなくテーブルの列名を指しているため_pivot
、snake_caseです。.withPivot(['measurement', 'sort_order'])
キャメルケースとしてピボットデータを簡単に参照して返す方法はありますか?
基本モデルがデフォルトでキャメルケースを使用していることを考えると、正常に動作するものをオーバーライドしましtoJSON
たが、間違っているように感じます。
toJSON: function () {
var data = BaseModel.prototype.toJSON.apply(this, arguments);
data.ingredients && (data.ingredients = data.ingredients.map(this.parse));
return data;
}
私はthrough
モデルを使用することにオープンですが、フェッチでテーブル データを返す方法を理解できませんでした。through
(すべてのデータが何らかの形式である限り、上記の JSON 形式に設定されていません。)