代码之家  ›  专栏  ›  技术社区  ›  Obromios

rails 5.1中枚举参数的ArgumentError in new

  •  4
  • Obromios  · 技术社区  · 6 年前

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

    Audience = ['everyone', 'signed_in_only','visitor_only', 'app_only', 'exclude_app']
    enum audience: Audience
    

    公告控制器定义audience\u参数

    def announcement_params
      params.require(:announcement).permit(:body, :audience, :expiry)
    end
    

    在创建公告时,audience\u参数为

    <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中会抛出这个错误,我该如何解决这个问题?

    1 回复  |  直到 6 年前
        1
  •  8
  •   user229044 Sam Hogarth    6 年前

    enum 它允许你使用符号名而不是数字。它们定义的访问器期望您提供一个字符串或符号,而不是底层的数值。

    您应该使用

    @announcement.audience = 'everyone'
    

    @announcement.audience = 0
    

    在较新的Rails中,此行为可能已更改,但 对的 事情一直是分配人类可读的字符串,而不是数字值。