Rails中的ArgumentError(“ 1”不是有效类型)

时间:2018-09-15 09:57:38

标签: ruby-on-rails ruby-on-rails-5

我正在处理具有选择列表的表单:

<%= 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版。

如何解决该问题?

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