1

我尝试通过 ajax 将现有的子模型添加到父模型,只提供新的 id。

我的模型:

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

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

在我的 html 表单中,用户正在查看用户,它可以选择要添加的现有图书。这将导致一个 Ajax 请求。我只想发送新书,而不是所有已分配的书。例如,用户模型已经有 Books 1 和 2,现在用户选择 Book 3 也被分配。

我找不到正确的参数结构。如果我使用以下内容,它会完全覆盖当前的关联。

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

应该如何构建参数以使其仅添加新书?作为后续,我如何构建参数以仅删除单个关联?

4

1 回答 1

2

您只需在请求中发送一个“book_id”。
然后在控制器中:

# 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 回答