我正在处理具有选择列表的表单:
<%= f.select :type, options_for_select(Property.types), {prompt: "Select Type of Property..."}, class: "form-control" %>
type
是我的数据库中的整数。 Property.types
正在从我的媒体资源模型中的enum
属性中拉出列表:
enum type: { Type_1: 1, Type_2: 2, Type_3: 3 }
由于某些原因,提交表单时出现错误:
ArgumentError(“ 1”不是有效类型): 在10毫秒内完成500个内部服务器错误(ActiveRecord:4.0毫秒)
我认为这是因为所选列表值是作为字符串而不是整数提交的。
我正在使用Rails 5.2.1版。
如何解决该问题?
答案 0 :(得分:3)
ArgumentError(“ 1”不是有效类型)
您应该像下面那样更改select
<%= f.select :type, options_for_select(Property.types.map { |key, value| [key.humanize, key] }), {prompt: "Select Type of Property..."}, class: "form-control" %>
因为这个
<%= f.select :type, options_for_select(Property.types), {prompt: "Select Type of Property..."}, class: "form-control" %>
使用select
生成options
,例如
<option value="0">Type_1</option>
<option value="1">Type_2</option>
<option value="2">Type_1</option>
因此,在表单提交后,select
的值将作为"0", "1", "2"
发送,这对于枚举不是有效的类型 type
。
还有这个
<%= f.select :type, options_for_select(Property.types.map { |key, value| [key.humanize, key] }), {prompt: "Select Type of Property..."}, class: "form-control" %>
使用select
生成options
,例如
<option value="Type_1">Type 1</option>
<option value="Type_2">Type 2</option>
<option value="Type_3">Type 3</option>
因此,select
的值现在以"Type_1", "Type_2", "Type_3"
的形式发送,它们是枚举的有效类型 type
。
此外,type
是一个保留字(在 STI 中使用)。我建议将其更改为property_type