Joh*_*nny 5 ruby-on-rails ruby-on-rails-5
我正在处理具有选择列表的表单:
<%= f.select :type, options_for_select(Property.types), {prompt: "Select Type of Property..."}, class: "form-control" %>
Run Code Online (Sandbox Code Playgroud)
type是我数据库中的一个整数。该Property.types是从拉列表enum中我的财产模型属性:
enum type: { Type_1: 1, Type_2: 2, Type_3: 3 }
Run Code Online (Sandbox Code Playgroud)
出于某种原因,在提交表单时,我收到一个错误:
ArgumentError ('1' is not a valid type): Completed 500 Internal Server Error in 10ms (ActiveRecord: 4.0ms)
我认为这是因为选定的列表值是作为字符串而不是整数提交的。
我正在使用 Rails v.5.2.1。
如何解决这个问题?
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" %>
Run Code Online (Sandbox Code Playgroud)
因为这
<%= f.select :type, options_for_select(Property.types), {prompt: "Select Type of Property..."}, class: "form-control" %>
Run Code Online (Sandbox Code Playgroud)
生成select与options像
<option value="0">Type_1</option>
<option value="1">Type_2</option>
<option value="2">Type_1</option>
Run Code Online (Sandbox Code Playgroud)
因此,在表单提交的值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" %>
Run Code Online (Sandbox Code Playgroud)
生成select与options像
<option value="Type_1">Type 1</option>
<option value="Type_2">Type 2</option>
<option value="Type_3">Type 3</option>
Run Code Online (Sandbox Code Playgroud)
所以,现在的值select作为发送"Type_1", "Type_2", "Type_3"其是有效类型枚举 type。
此外,type是一个保留字(在STI 中使用)。我建议将其更改为类似property_type
| 归档时间: |
|
| 查看次数: |
2509 次 |
| 最近记录: |