如何允许活动模型序列化器使用嵌套属性?
How Can I permit nested attributes with active model serializer?
我在 rails 上的 ruby 中使用 api 中的 active_model_serializers,并且我有一个控制器方法,可以在其中保存发票及其嵌套项目经过一些计算,问题是在包含序列化程序之后,嵌套属性受到限制,我无法访问它们。
根据一些文档,我有这样的代码,但它不起作用
#Controller
def invoice_params
params.require(:invoice).permit(:person_id, :date, sales_attributes: [:reference_id, :quantity, :price])
end
#Model
class Invoice < ApplicationRecord
belongs_to :person
has_many :sales
accepts_nested_attributes_for :sales, allow_destroy: true
end
#Serializer
class InvoiceSerializer < ActiveModel::Serializer
attributes :id, :date, :total, :profit, :consecutive, :person_id
has_many :sales, root: :sales_attributes
belongs_to :person
end
我发送的 json 请求是:
{
"person_id": 4,
"date": "2019-03-20",
"sales": [
{
"reference_id":1,
"quantity": 90000,
"price": 240
},
{
"reference_id":1,
"quantity": 50000,
"price": 240
}
]
}
有人知道会发生什么吗?在包含序列化程序之前 gem 它工作正常。
提前致谢!
改变
def invoice_params
params.require(:invoice).permit(:person_id, :date, sales_attributes: [:reference_id, :quantity, :price])
end
到
def invoice_params
params.require(:invoice).permit(:person_id, :date, sales_attributes: [:id, :reference_id, :quantity, :price])
end
和
{
"person_id": 4,
"date": "2019-03-20",
"sales": [
{
"reference_id":1,
"quantity": 90000,
"price": 240
},
{
"reference_id":1,
"quantity": 50000,
"price": 240
}
]
}
到
{
"person_id": 4,
"date": "2019-03-20",
"sales_attributes": [
{
"reference_id":1,
"quantity": 90000,
"price": 240
},
{
"reference_id":1,
"quantity": 50000,
"price": 240
}
]
}
我在 rails 上的 ruby 中使用 api 中的 active_model_serializers,并且我有一个控制器方法,可以在其中保存发票及其嵌套项目经过一些计算,问题是在包含序列化程序之后,嵌套属性受到限制,我无法访问它们。
根据一些文档,我有这样的代码,但它不起作用
#Controller
def invoice_params
params.require(:invoice).permit(:person_id, :date, sales_attributes: [:reference_id, :quantity, :price])
end
#Model
class Invoice < ApplicationRecord
belongs_to :person
has_many :sales
accepts_nested_attributes_for :sales, allow_destroy: true
end
#Serializer
class InvoiceSerializer < ActiveModel::Serializer
attributes :id, :date, :total, :profit, :consecutive, :person_id
has_many :sales, root: :sales_attributes
belongs_to :person
end
我发送的 json 请求是:
{
"person_id": 4,
"date": "2019-03-20",
"sales": [
{
"reference_id":1,
"quantity": 90000,
"price": 240
},
{
"reference_id":1,
"quantity": 50000,
"price": 240
}
]
}
有人知道会发生什么吗?在包含序列化程序之前 gem 它工作正常。
提前致谢!
改变
def invoice_params
params.require(:invoice).permit(:person_id, :date, sales_attributes: [:reference_id, :quantity, :price])
end
到
def invoice_params
params.require(:invoice).permit(:person_id, :date, sales_attributes: [:id, :reference_id, :quantity, :price])
end
和
{
"person_id": 4,
"date": "2019-03-20",
"sales": [
{
"reference_id":1,
"quantity": 90000,
"price": 240
},
{
"reference_id":1,
"quantity": 50000,
"price": 240
}
]
}
到
{
"person_id": 4,
"date": "2019-03-20",
"sales_attributes": [
{
"reference_id":1,
"quantity": 90000,
"price": 240
},
{
"reference_id":1,
"quantity": 50000,
"price": 240
}
]
}