1

新しいIDを指定するだけで、ajaxを介して既存の子モデルを親に追加しようとしています。

私のモデル:

class User < ActiveRecord::Base
  has_many :books
  attr_accessible :books
end

class Book < ActiveRecord::Base
  belongs_to: :user
end

私のhtmlフォームでは、ユーザーはユーザーを表示しており、既存のブックを選択して追加できます。これにより、Ajaxリクエストが発生します。すでに割り当てられているすべての本ではなく、新しい本のみを送信したいと思います。たとえば、ユーザーモデルにはすでにブック1と2があり、ユーザーはブック3を選択して割り当てます。

パラメータの正しい構造が見つかりません。以下を使用すると、現在の関連付けが完全に上書きされます。

// Ajax parameters
user[books] = [3]

新しい本だけを追加するようにパラメータをどのように構築する必要がありますか?また、フォローアップとして、単一の関連付けのみを削除するパラメーターを作成するにはどうすればよいですか?

4

1 に答える 1

2

リクエストで「book_id」を 1 つだけ送信する必要があります。
次にコントローラーで:

# assuming params hash is { :book_id => 3 }

@book = Book.find params[:book_id]
@user.books << @book
...

# Removing
@user.books.delete(@book)


# In `update` action

params[:user][:book_ids] = (@user.book_ids + params[:user][:book_ids]).flatten
@user.update_attributes(params[:user])
于 2012-07-03T11:34:19.067 に答える