Rails:通过ajax将现有子项添加为父模型的新关联

时间:2012-07-03 09:24:41

标签: ruby-on-rails ajax activerecord parent-child

我尝试通过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]

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

1 个答案:

答案 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])