如果我定义了这个参数:
params do
requires :employees, type: Array do
requires :name, type: String
requires :surname, type: String
requires :company_data do
# ...
end
end
company_data
在模型中定义如下:
def company_data=(args)
...
end
基本上它类似accepts_nested_attributes_for
,但有一些自定义逻辑。
:company_id
在命名空间中定义,我想在company_data
中使用其他值自动分配此参数,这样我就不必在捕获参数后迭代数组。
#company_id: {current_company_id}
答案 0 :(得分:1)
如果我理解正确,您希望在params[:company_data]
下将params[:company_data]
发送到模型中的company_data
方法。为此,您可以使用葡萄的coerce_with:
选项:
params do
requires :employees, type: Array do
requires :name, type: String
requires :surname, type: String
requires :company_data, coerce_with: ->(data) { object.company_data(data) } do
# ...
end
end
执行此操作会将结果object.company_data(data)
分配给company_data,之后将尝试验证,因此如果在do块中您希望company_id
,您现在可以将其添加到块内的验证中: / p>
params do
requires :employees, type: Array do
requires :name, type: String
requires :surname, type: String
requires :company_data, coerce_with: ->(data) { object.company_data(data) } do
requires :company_id, type: Integer
# ...
end
end