【发布时间】:2020-05-26 09:54:11
【问题描述】:
在我的控制器中,我想在我的更新方法中将字段更新为我的模型对象。我的模型的一些字段是整数类型。但是,这些字段是 params 对象中的字符串。
我想做
def profile_params
params
.require(:client)
.permit(:marital_status, :name, ...)
end
def update
@client = Client.find params[:id]
@client = Client.update(profile_params)
end
但我收到以下错误
ArgumentError - '0' 不是有效的 marital_status。
果然,如果在我的profile_params.rb 中我将marital_status 转换为整数,该特定错误就会消失,但我的Client 类中有很多字段是整数。我想有一个比手动转换每个字段更好的解决方案。或者即使我必须这样做,组织代码的最佳方式是什么?
编辑:这是客户端模型的摘要
class Client < ApplicationRecord
enum marital_status: %i[single married divorced separated widowed]
end
传递给控制器的参数如下所示:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"tLUZ0bb6tRRkx/OFNVbhCT/AnrudPbCQMvOakw9HyiHkiqMip5tkDnYsF2F/e7TE4VkmIgF1hxtYI78Pw2bsSw==", "client"=>{"id"=>"517", "marital_status"=>"0"}, "id"=>"517"}
【问题讨论】:
-
显示您的 profile_params.rb、您的数据库迁移和您的输入表单
-
听起来(可能还有其他)是枚举,对吗?
-
同意@RockwellRice,
marital_status是enum,尽管他没有展示他的模型。param中的marital_status是nil,因此它将nil转换为0,而enum中不存在该enum -
感谢您的所有意见;我已经更新了我的问题。来自表单的输入实际上是一个“0”字符串。
-
向我们展示表单元素以选择状态?
标签: ruby-on-rails controller strong-parameters