Ruby on rails 从嵌套资源的参数中删除字符串

Ruby on rails 从嵌套资源的参数中删除字符串,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我的表单中有嵌套资源,其中一个表单中有一个名为“value_paid”的字段,其结构如下:“$2”,但由于我的value_paid字段在数据库中是十进制类型,因此在保存字段时,我需要只保存value_paid字段中所有嵌套资源的数字字符 我正在应用相同类型的验证,但对于主字段,它将是: def payment_params final_params = params.require(:payment).permit(:payment, :day, :comments, :billing_id

我的表单中有嵌套资源,其中一个表单中有一个名为“value_paid”的字段,其结构如下:“$2”,但由于我的value_paid字段在数据库中是十进制类型,因此在保存字段时,我需要只保存value_paid字段中所有嵌套资源的数字字符

我正在应用相同类型的验证,但对于主字段,它将是:

def payment_params
  final_params = params.require(:payment).permit(:payment, :day, :comments, :billing_id, payment_details_attributes: [:id, :value_paid, :voucher, :date_voucher, :observation, :payment_method_id, :payment_id, :paid_destination, :_destroy])
  final_params['payment'] = final_params['payment'].scan(/[.0-9]/).join().to_f
  final_params
end

如何将其应用于嵌套属性payment\u details\u attributes的每个value\u paymed字段?

我将向模型添加一个自定义setter方法,并清理模型中的输入

# in app/model/payment.rb
def payment=(value)
  value = value.scan(/[\d\.,]*/).join if value.is_a?(String)

  super(value)
end

在表单中进行更改,使其仅取整数值,否则您可以在子模型中编写“保存前”回调来修改该值,这将解决您的问题。我建议使用“保存前”回调,而不是“保存前”。因为字段是整数,所以必须对其进行数值验证。