【问题标题】:ArgumentError in new for an enum parameter in rails 5.1新的 ArgumentError 用于 rails 5.1 中的枚举参数
【发布时间】:2018-07-08 15:32:34
【问题描述】:

我有一个模型,公告,带有一个枚举

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>

我在公告控制器的 action 方法中的代码包括

@announcement = Announcement.new(announcement_params)
@announcement.audience = @announcement.audience.to_i

适用于 rails 5.0。但是现在第一行抛出异常

ArgumentError: '0' is not a valid audience

大概是因为观众值还没有转换成整数。鉴于新方法不进行验证,为什么在 rails 5.1 中会引发此错误,我该如何解决?

【问题讨论】:

    标签: ruby-on-rails enums ruby-on-rails-5.1


    【解决方案1】:

    enum 旨在允许您使用符号名称而不是数字。他们定义的访问器希望您提供字符串或符号,而不是基础数值。

    你应该使用

    @announcement.audience = 'everyone'
    

    不是

    @announcement.audience = 0
    

    这种行为可能在较新的 Rails 中有所改变,但正确始终是分配人类可读的字符串,而不是数值。

    【讨论】:

      猜你喜欢
      • 2016-09-07
      • 1970-01-01
      • 2013-04-07
      • 2016-09-13
      • 2015-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多