【问题标题】:remove string characters from the parameters of the nested resources从嵌套资源的参数中删除字符串字符
【发布时间】:2020-10-23 23:59:39
【问题描述】:

我的表单中有嵌套资源,其中一个有一个名为“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_details_attributes 的每个 value_paid 字段?

【问题讨论】:

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

标签: ruby-on-rails ruby ruby-on-rails-4


【解决方案1】:

我会在模型中添加一个自定义 setter 方法并清理模型中的输入。

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

  super(value)
end

【讨论】:

    猜你喜欢
    • 2021-05-19
    • 1970-01-01
    • 2016-01-19
    • 2019-09-17
    • 2013-06-24
    • 2019-04-11
    • 2016-07-26
    相关资源
    最近更新 更多