rails 5.1 中枚举参数的新参数错误
ArgumentError in new for an enum parameter in rails 5.1
我有一个模型,公告,带有枚举
Audience = ['everyone', 'signed_in_only','visitor_only', 'app_only', 'exclude_app']
enum audience: Audience
公告控制器定义audience_params
def announcement_params
params.require(:announcement).permit(:body, :audience, :expiry)
end
在创建公告时,audience_params 是
<ActionController::Parameters {"body"=>"This is for everyone", "audience"=>"0", "expiry"=>"27/01/2018"} permitted: true>
我在公告控制器的操作方法中的代码包括
@announcement = Announcement.new(announcement_params)
@announcement.audience = @announcement.audience.to_i
适用于 rails 5.0。但是现在第一行抛出异常
ArgumentError: '0' is not a valid audience
估计是因为受众值还没有转换成整数。鉴于新方法不进行验证,为什么会在 rails 5.1 中抛出此错误,我该如何解决?
enum
旨在允许您使用符号名称而不是数字。他们定义的访问器希望您提供字符串或符号,而不是基础数值。
你应该使用
@announcement.audience = 'everyone'
没有
@announcement.audience = 0
此行为在较新的 Rails 中可能已更改,但 正确的 始终是分配人类可读的字符串,而不是数值。
我有一个模型,公告,带有枚举
Audience = ['everyone', 'signed_in_only','visitor_only', 'app_only', 'exclude_app']
enum audience: Audience
公告控制器定义audience_params
def announcement_params
params.require(:announcement).permit(:body, :audience, :expiry)
end
在创建公告时,audience_params 是
<ActionController::Parameters {"body"=>"This is for everyone", "audience"=>"0", "expiry"=>"27/01/2018"} permitted: true>
我在公告控制器的操作方法中的代码包括
@announcement = Announcement.new(announcement_params)
@announcement.audience = @announcement.audience.to_i
适用于 rails 5.0。但是现在第一行抛出异常
ArgumentError: '0' is not a valid audience
估计是因为受众值还没有转换成整数。鉴于新方法不进行验证,为什么会在 rails 5.1 中抛出此错误,我该如何解决?
enum
旨在允许您使用符号名称而不是数字。他们定义的访问器希望您提供字符串或符号,而不是基础数值。
你应该使用
@announcement.audience = 'everyone'
没有
@announcement.audience = 0
此行为在较新的 Rails 中可能已更改,但 正确的 始终是分配人类可读的字符串,而不是数值。