ruby-on-rails - ArgumentError ( is not a valid ) by enum
问题描述
概述
使用枚举创建表单(复选框)时,
ArgumentError ('1' is not a valid brake):
发生了错误
此列只接受整数,拒绝'1'(string) 请告诉我如何将字符串转换为整数。
如果您能将专家的智慧借给我们,我们将不胜感激。
导轨'6.0.3'
调试
表单跳过时param的内容(还有字符串“1”……)
(byebug) params
<ActionController::Parameters {"authenticity_token"=>"...", "brake"=>"1", "controller"=>"download", "action"=>"confirm"} permitted: false>
代码
下载.rb
class Download < ApplicationRecord
enum brake: {on: 1, off: 0}, _prefix: true
end
下载控制器.rb
class download_controller < ApplicationController
SESSION_KEY_FOR_DOWNLOAD = :download
def new
@download = ::Download.new
end
def confirm
parameters = download_params
@download = ::Download.new(parameters)
session[SESSION_KEY_FOR_DOWNLOAD] = parameters
end
def create
@download = ::Download.new(session[SESSION_KEY_FOR_DOWNLOAD])
@download.save
session[SESSION_KEY_FOR_DOWNLOAD] = nil
redirect_to root_url
end
def download_params
params.permit(:brake )
end
end
新的.html.erb
<%= form_with url: confirm_download_path(@download), local: true do |f| %>
<fieldset class="form_check-block">
<label>
<%= f.check_box :brake, checked: @download&.brake_on? %>
<%= f.label " ", class: "top_left" %>
</label>
</fieldset>
<span>brake</span>
<button>register</button>
<% end %>
谢玛.rb
create_table "download", force: :cascade do |t|
t.integer "brake", limit: 1, default: 1, null: false
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
end
解决方案
您使用带有枚举的复选框(只有两种状态)这一事实可能会突出设计缺陷。您应该考虑以下更改:
- 保留复选框并为
brake
属性使用布尔列 - 使用选择字段并保留
brake
枚举(如果您打算拥有更多状态)
如果要保留复选框和枚举,则需要brake
按名称而不是按值引用可能的值
f.check_box :brake, { checked: @download&.brake_on? }, :on, :off
推荐阅读
- logging - 如何使用 spring-data-aerospike 记录 aerospike 查询
- docker - 将超级账本结构部署到 docker swarm
- c# - 在 .NET Core C# 控制台应用程序中使用 HttpClient 进行 Google 社交登录?
- python-3.x - 按键汇总列表值字典
- javascript - 本地操作表,即将表读入内存,处理后再写入服务器
- html - HTTP 响应有 HTTP 方法吗?
- python - Bs4 不返回任何数据,因为它只返回表的注释部分
- javascript - 登录 React + Express + mongoDB 无法正常工作
- php - 当客人访问他的页面时隐藏用户的个人资料侧边栏
- crc - CRC校验和计算算法