【问题标题】:Rails enum returning integer value in Sidekiq JobRails枚举在Sidekiq Job中返回整数值
【发布时间】:2018-08-14 02:58:30
【问题描述】:

只有在 Sidekiq 作业中运行时,我们才会收到包含枚举类型的错误报告。我不确定是每次运行还是随机运行,但我们通常会收到如下错误:

NoMethodError: undefined method `to_sym' for 1:Integer 你的意思是? to_s

enum status: [:active, :inactive, :deleted]

def set_status
  return if self.status.to_sym == :deleted
  ...
end

【问题讨论】:

  • return if self.status.to_sym == :deleted 应该是 return if deleted?。您应该使用枚举提供的魔法方法,而不是直接使用该字段。
  • 感谢@meagar! - 我们将在我们的代码中查看这些位置并为将来的搜索报告。
  • @meagar 你说得对,这些确实有效。但它似乎缺少支持枚举类型的实现细节,不是吗?
  • 没关系,这会为一个真正不需要的特定情况创建对 Rails 的依赖。

标签: ruby-on-rails ruby-on-rails-5 sidekiq


【解决方案1】:

添加为答案,因此可以将此问题标记为已关闭:

return if self.status.to_sym == :deleted 应该是 return if deleted?。您应该使用枚举提供的魔法方法,而不是直接使用字段。

Sidekiq 是 Ruby 的处理器,因此引入它会产生对 Rails 的不必要的依赖。

当然这是我的看法,但经过深思熟虑,Rails 应该是与它们各自的符号形式等价处理数字的一个。例如,您可以将status 设置为0、:active 或'active',它会适当地保存,但get 过程中返回的值应保持一致或提供方法以确保一致性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多