Obr*_*ios 4 enums ruby-on-rails ruby-on-rails-5.1
我有一个模型,公告,有一个枚举
Audience = ['everyone', 'signed_in_only','visitor_only', 'app_only', 'exclude_app']
enum audience: Audience
Run Code Online (Sandbox Code Playgroud)
公告控制器定义audience_params
def announcement_params
params.require(:announcement).permit(:body, :audience, :expiry)
end
Run Code Online (Sandbox Code Playgroud)
在创建公告时,audience_params是
<ActionController::Parameters {"body"=>"This is for everyone", "audience"=>"0", "expiry"=>"27/01/2018"} permitted: true>
Run Code Online (Sandbox Code Playgroud)
我在公告控制器的动作方法中的代码包括
@announcement = Announcement.new(announcement_params)
@announcement.audience = @announcement.audience.to_i
Run Code Online (Sandbox Code Playgroud)
适用于rails 5.0.但现在第一行引发了异常
ArgumentError: '0' is not a valid audience
Run Code Online (Sandbox Code Playgroud)
大概是因为观众价值尚未转换为整数.鉴于新方法没有进行验证,为什么在rails 5.1中抛出此错误,我该如何解决这个问题呢?
enum意味着允许您使用符号名称而不是数字.他们定义的访问器期望您提供字符串或符号,而不是基础数值.
你应该使用
@announcement.audience = 'everyone'
Run Code Online (Sandbox Code Playgroud)
不
@announcement.audience = 0
Run Code Online (Sandbox Code Playgroud)
在较新的Rails中,此行为可能已更改,但正确的事情始终是分配人类可读的字符串,而不是数值.
| 归档时间: |
|
| 查看次数: |
845 次 |
| 最近记录: |