Techioz Blog

Rails 内のデータを介して has_many を更新する際の問題

概要

私はモデルが次のようなプロジェクトに取り組んでいます。

ユーザーには_多くのセットアップがあり、

setups has_many の楽器が楽器のセットアップを通じてあり、

楽器にはinstrumentsetupを通じて_多くのセットアップがあり、

楽器のセットアップはセットアップに属し、

楽器のセットアップは楽器に属します、

現在、セットアップ内のすべてのパラメータを更新できるようにしていますが、セットアップ内のどの楽器も同時に更新できるようにしようとしていますが、問題が発生しています。インストゥルメントを更新するために setups_controller の create メソッドからコードを借用していますが、新しいインストゥルメントをいくつ選択しても、最後に選択したインストゥルメントのコピーが大量に作成されるだけであるという問題が発生しています。セットアップ コントローラーのコードはすべて次のとおりです。

これは、選択したすべての楽器ではなく、同じ楽器の複数のコピーのみを表示して、フロントエンドにどのように表示されるかを示す写真です

解決策

更新は作成とは異なります。更新アクションでは、モデルではなくオブジェクト自体を更新する必要があります。セットアップを取得しており、セットアップにはinstrumentsetupsを通じて多くの楽器があるため、次のように更新できます

def update
    setup = Setup.find(params[:id])
    instruments = Instrument.find params[:instrument_ids]
    if setup && setup.user_id == current_user.id
      setup.update(instruments: instruments)
      setup.update!(setup_params)
      render json: setup, status: :created
    else
      render json: "Invalid Credentials", status: :unauthorized
    end
  end