我尝试通过ajax将现有的子模型添加到父级,只提供新的id。
我的模特:
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]
应该如何构建参数,使其只添加新书?作为后续工作,我如何构建参数以仅删除单个关联?
答案 0 :(得分: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])