我在 Rails 4 中有一个 JSON api 后端。我正在尝试使用accepts_nested_attributes_for
.
#models/section.rb
class Section < ActiveRecord::Base
belongs_to :project
belongs_to :responsible, class_name: "User"
accepts_nested_attributes_for :project, :responsible, allow_destroy: true
end
#controllers/api/section_controller
def section_params
params.require(:section).permit(:title, :body, :status, responsible_attributes: [:id], project_attributes: [:id])
end
与问题相关的部分json:
{
section: {
...
project_attributes: { id: 5 }
responsible_attributes: { id: 2 }
...
}
}
这最终会引发Couldn't find Project with ID=5 for Section with ID=84
. Section.update_attributes(section_params)
我想那是因为它试图找到关联,但它不存在,因为这是我试图改变它的方式。
我的主要问题是:有没有办法使用嵌套参数使关联更改工作?我想这样做,而不是:project_id
保持:responsible_id
客户端模型的完整性,而不是同时拥有project: {:id, etc}
和project_id:
.
我正在使用客户端序列化程序将嵌套模型名称转换为具有_attributes
后缀。在最坏的情况下,我将不得不使用它来追加project_id
和responsible_id
发送对象以进行更新。