从表单中对整数值进行Rails批量分配

时间:2016-04-15 04:16:13

标签: ruby-on-rails

来自网络表单的所有值都是字符串。我有一个名为Announcement的类,它有一个字段kind,其数据类型是整数。在模型类中,我定义了一个枚举

enum kind: {
  event: 1,
  feature: 2
}

关于质量任务我已经完成了,一般没问题。问题是,当我这样做时,它会抱怨'1' is not a valid kind因为它是一个字符串而不是整数。

announcement=Announcement.new(announcement_params)

除了手动设置字段的值外,是否有解决此问题的方法? 谢谢

2 个答案:

答案 0 :(得分:0)

答案刚出现在我的脑海中,这就是我要解决的问题

kind=params[:announcement][:kind].to_i
params[:announcement].delete(:kind)
params[:announcement].merge(kind: kind)
  1. 获取kind参数并将其转换为整数
  2. 从params
  3. 中删除kind字符串
  4. 将新kind合并到参数
  5. 最后是质量分配的白名单参数

    谢谢@uzaif

答案 1 :(得分:0)

您可以重新定义kind模型中Announcement属性的setter,如下所示:

# app/models/announcement.rb
def kind=(value)
  super(value.to_i)
  # or
  # super(Integer(value))
end

首先将给定值转换为整数,然后调用enum定义的原始方法。但请注意,to_i会转换任何内容,即使是非数字或nil s - 这些也会转换为0。因此,我建议永远不要在定义的枚举值中使用0或使用Integer(value)形式,这会在非数字或nil s上引发异常。

setter允许再次进行质量分配:

Announcement.new(kind: '1')   # should be OK