ruby-on-rails - Rails 中的 ArgumentError ('1' 不是有效类型)

标签 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 正在从我的 Property 模型中的 enum 属性中提取列表:

enum type: { Type_1: 1, Type_2: 2, Type_3: 3 }

由于某种原因,提交表单时出现错误:

ArgumentError ('1' is not a valid type): Completed 500 Internal Server Error in 10ms (ActiveRecord: 4.0ms)

我认为这是因为所选列表值作为字符串而不是整数提交。

我正在使用 Rails v.5.2.1。

如何解决这个问题?

最佳答案

ArgumentError ('1' is not a valid type)

您应该像下面这样更改选择

<%= 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" %>

生成带有选项选择,例如

<option value="0">Type_1</option>
<option value="1">Type_2</option>
<option value="2">Type_1</option>

因此,在提交表单时,select 的值将以 “0”、“1”、“2” 形式发送,这些对于 来说不是有效类型枚举 类型

还有这个

<%= f.select :type, options_for_select(Property.types.map { |key, value| [key.humanize, key] }), {prompt: "Select Type of Property..."}, class: "form-control" %>

生成带有选项选择,例如

<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 是一个保留字(用于STI)。我建议将其更改为 property_type

关于ruby-on-rails - Rails 中的 ArgumentError ('1' 不是有效类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52343637/

相关文章:

ruby - 并行 gem Ruby 中的线程

ruby-on-rails - Rails 如何解析文本/事件流?

ruby-on-rails - Rails : Association between Category, 子类别和律师

ruby-on-rails - 权限被拒绝@dir_s_mkdir (Errno::EACCES) - 在应用程序运行时

javascript - 如何向谷歌地图添加多个标记?

ruby-on-rails - 显示关联记录索引 View

css - 内嵌 ruby​​ 样式宽度标签

ruby-on-rails - 使用 Rails 5 完成类(class)和模块分配给用户

ruby-on-rails - 删除 "Friend"的用户正在删除用户对象

ruby-on-rails - 查询 : where has_many association does not contain specific value