来自网络表单的所有值都是字符串。我有一个名为Announcement
的类,它有一个字段kind
,其数据类型是整数。在模型类中,我定义了一个枚举
enum kind: {
event: 1,
feature: 2
}
关于质量任务我已经完成了,一般没问题。问题是,当我这样做时,它会抱怨'1' is not a valid kind
因为它是一个字符串而不是整数。
announcement=Announcement.new(announcement_params)
除了手动设置字段的值外,是否有解决此问题的方法? 谢谢
答案 0 :(得分:0)
答案刚出现在我的脑海中,这就是我要解决的问题
kind=params[:announcement][:kind].to_i
params[:announcement].delete(:kind)
params[:announcement].merge(kind: kind)
kind
参数并将其转换为整数kind
字符串
kind
合并到参数最后是质量分配的白名单参数
谢谢@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