【问题标题】:Error while defining enum values in Rails在 Rails 中定义枚举值时出错
【发布时间】:2020-02-11 11:45:01
【问题描述】:
class Klass < ApplicationRecord

  enum dimension: { length: 'length', breadth: 'breadth' }
end

我收到以下错误:-

ArgumentError: 你试图在模型上定义一个名为“name”的枚举 “Klass”,但这会生成一个类方法“length”,即 已由 ActiveRecord::Relation 定义。

我只想知道我有哪些选择可以让维度枚举与length 一起工作作为其价值之一。是否可以创建枚举而不在模型上定义length 方法?

【问题讨论】:

  • 一开始为什么要这样做?如果您的模型只有两个维度顶部,为什么要添加另一层连接和复杂性?这很讨厌 EAV 反模式。
  • @max 我已经简化了我的代码并将值重命名为一些通用的值。原来的有很多值,其中一个值是长度。
  • 为什么不向实际具有该属性的表添加两列,这样您就不必创建荒谬的Thing.joins(:attributes).where(dimension: 'length', value: 15) 查询?

标签: ruby-on-rails ruby activerecord enums


【解决方案1】:

length 是保留的方法名称。所以,你不能使用这个保留的方法名。

您可以尝试使用前缀:

class Klass < ApplicationRecord
  enum dimension: { length: 'length', breadth: 'breadth' }, _prefix: :dimension
end

注意: 类方法“length”,已由 ActiveRecord::Relation 定义。

【讨论】:

  • length 不是关键字。它是一个方法名称。关键字是语言中具有特殊意义的词,如ifelseclassmodule
  • 我根据建议更改了(@max)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多