web-dev-qa-db-ja.com

ストラップ関係の仕組みを理解する

私はstrapiの初心者で、一般的にはバックエンド開発を行っています。非常に小さなものがどのように機能するかを理解しようとしています。

ユーザーモデル、プロファイルモデル、運賃モデルがあります。

ユーザーはプロファイルを持つことができるので、関係を作成しましたhas and belongs to one。プロファイルは運賃を持つことができ、私はプロファイルと運賃の間に同じ関係を作成しました。

ここで私が気づいたのは:

クライアントでプロファイルセクションに移動すると、名前、姓、住所などのすべてのプロパティを含めて保存します。ユーザーIDを追加すると、すべてが正常に行われます。

ここでのポイントは、同じプロファイルセクションに運賃入力もあるということです。運賃を特別に保存するボタンを追加するのではなく、プロファイルを保存して運賃を保存することです...

ここで何かすることは可能ですか、それとも私は何か間違ったことをしていますか?

私は毎回プロファイルを照会することなく運賃をより適切に見つけ、整理し、操作できるようにプロファイルごとに運賃を分けていますが、ID ro何かでプロファイルレコードを持っています...

誰かが最善のアプローチを明確に説明できますか?それを正しく達成するにはどうすればよいですか?ありがとう

8
Ayeye Brazo

Form

作成するHTML入力 ネストされたjsonデータ フォームを作成して 出力をテスト

<form action="profiles" method="POST" accept-charset="utf-8">
  <input type="text" name="name" value="MyProfileName" />
  <input type="text" name="fare[name]" value="MyProfileFareName" />
</form>

parametersの解析

パラメータはバックエンドから次のように受信されます

name=MyProfileName&fare[name]=MyProfileFareName

コントローラは上記のパラメータをjsonとして解析します

{
  'profile' => {
    'name' => 'MyProfileName',
    'fare' => {
        'name' => 'MyProfileFareName',
    }
  }
}

コントローラーcreateまたはupdateアクション

コントローラーは、受け取ったパラメーターを使用してデータベースモデルを更新する必要があります。 add内にeditを永続化するmodelおよびdatabaseメソッドは、servicesオブジェクト内で(コントローラー内ではなく)定義されます。コントローラの責任は、これらのメソッドを呼び出すことだけです。

parametersbodyからrequestを取得できます。 requestオブジェクトはコントローラー内で使用できます ctx.request

As この例ではcreateアクション .addメソッド(categoryサービスクラス から。 api docs については説明がないため、 githubの例 に従う必要があります。

module.exports = {
  // POST /profiles
  create: async (ctx) => {
    // use the fare service to add a new entry with value request.body.fare
    var profile = strapi.services.profile.add(ctx.request.body)
    strapi.services.fare.add(ctx.request.body.fare)
    return profile 
  }
};

Profileサービスaddおよびeditメソッド

addおよびeditメソッドのロジックをよりよく理解するには、githubの例を確認してください。

add: async (values) => {
    // Extract values related to relational data.
    const relations = _.pick(values, Profile.associations.map(ast => ast.alias));
    const data = _.omit(values, Profile.associations.map(ast => ast.alias));

    // Create entry with no-relational data.
    const entry = await Profile.create(data);

    // Create relational data and return the entry.
    return Profile.updateRelations({ _id: entry.id, values: relations });
},
4