Ruby on rails 创建关联时如何循环强参数
不要与在参数上循环混淆,如何在强参数上循环 我的代码中有很多“移动”部分,但我会坚持这篇文章的标题。我向api发送一个对象数组,如下所示Ruby on rails 创建关联时如何循环强参数,ruby-on-rails,ruby,Ruby On Rails,Ruby,不要与在参数上循环混淆,如何在强参数上循环 我的代码中有很多“移动”部分,但我会坚持这篇文章的标题。我向api发送一个对象数组,如下所示 name:'Foo', 税率组成部分:{ 组件:[{name:'cgm',rate:'2'},{…}] } 在ruby中,tax\u rate有许多tax\u rate\u组件(会计)。传入的将创建一个税率,然后创建其税率组件。这就是工作原理: Rails控制器: #我们假设所有必需的数据都已传递,并且不会抛出错误 def创建 税率=@Organizatio
name:'Foo',
税率组成部分:{
组件:[{name:'cgm',rate:'2'},{…}]
}
在ruby中,tax\u rate
有许多tax\u rate\u组件
(会计)。传入的将创建一个税率
,然后创建其税率组件
。这就是工作原理:
Rails控制器:
#我们假设所有必需的数据都已传递,并且不会抛出错误
def创建
税率=@Organization.tax\u rates.build(税率参数)
tax_rate.save将出现在“if”语句中
创建_tax_rate_组件(tax_rate)#我们跳过错误检查
呈现json:tax\u rate,包括:[:tax\u rate\u组件]
结束
私有的
def find_组织
结束
#在这里的某个地方,我需要使用rate_component_参数
def创建税率组件(税率)
组件=参数[:税率\组件][:组件]
components.map do | tc|
tax\u rate.tax\u rate\u components.build(
名称:tc[:name],
费率:tc[:费率]
).保存
结束
结束
定义速率参数
参数要求(:税率)。许可证(:名称)
结束
#我需要用这个
def速率组件参数
参数要求(:税率组件)。允许(
组件:[:名称,:速率]]
)
结束
创建税率组件时,我需要使用税率组件参数
,但如何使用?是否有一种干净的方法可以使用强参数创建税率
及其税率组件
回顾我所有的辅助项目,我似乎从来没有在循环时使用过强参数方法:(你就快到了:
def rate_component_params
params.require(:tax_rate_component).permit(
components: [:name, :rate]
)
end
当您传递一个符号数组时,Rails将允许使用这些键进行散列。Rails还有一个内置的方法,可以根据参数创建嵌套记录,即。例如:
class TaxRate < ApplicationRecord
has_many :tax_rate_components
accepts_nested_attributes_for :tax_rate_components
end
这样你就可以摆脱整个create\u tax\u rate\u组件
boondogle
def create
tax_rate = @organisation.tax_rates.new(rate_params)
if tax_rate.save
render json: tax_rate, include: [:tax_rate_components]
else
head :unprocessable_entity # or whateveer
end
end
谢谢。你在之后漏掉了一个“逗号”:name
和tax\u-rate\u-component\u-attributes
应该是tax\u-rate\u-components\u-attributes
。一切都很好。我似乎永远都不记得嵌套的属性应该如何复数化。。。
def create
tax_rate = @organisation.tax_rates.new(rate_params)
if tax_rate.save
render json: tax_rate, include: [:tax_rate_components]
else
head :unprocessable_entity # or whateveer
end
end