Rails - 使用ActiveRecord :: Enum的参数错误
我创建了一个模型Tester
,整数列为tester_type
,并声明模型中的enum变量。Rails - 使用ActiveRecord :: Enum的参数错误
class Tester < ApplicationRecord enum tester_type: { junior: 0, senior: 1, group: 2 }
end
我得到以下错误,而试图创建/初始化该模型中的对象:
ArgumentError: You tried to define an enum named "tester_type" on the model "Tester", but this will generate a class method "group", which is already defined by Active Record.
所以,我试图改变tester_type
到type_of_tester
但它抛出同样的错误:
ArgumentError: You tried to define an enum named "type_of_tester" on the model "Tester", but this will generate a class method "group", which is already defined by Active Record.
我已经搜索的解决方案,我发现这个错误是一个常数ENUM_CONFLICT_MESSAGE
在ActiveRecord::Enum类,但不能够找到这个问题的原因。
请帮帮我。
谢谢。
回答:
在这种情况下,如果你想使用枚举,你最好将你的标签重命名为其他东西。这不仅限于枚举 - 许多Active Record功能为您生成方法,通常也没有办法选择退出这些生成的方法。
然后更改group
到another_name
还是应该遵循这也
enum :kind, [:junior, :senior, :group], prefix: :kind band.kind_group?
回答:
检查了这一点。它是您遇到问题的选项组。您可以使用前缀选项,因为在这个岗位
enum options
回答:
提到可以使用:_prefix
或:_suffix
选择,当你需要定义具有相同的价值观或你的情况多枚举,以避免与已定义的方法发生冲突。如果传递值为true
,则方法前缀/后缀为枚举的名称。另外,也可以提供一个自定义的值:
class Conversation < ActiveRecord::Base enum status: [:active, :archived], _suffix: true
enum comments_status: [:active, :inactive], _prefix: :comments
end
采用上述例子中,爆炸和与相关联的范围沿着谓词方法现在前缀和/或相应后缀:
conversation.active_status! conversation.archived_status? # => false
conversation.comments_inactive!
conversation.comments_active? # => false
为了您情况下,我的建议是使用类似:
class Tester < ApplicationRecord enum tester_type: { junior: 0, senior: 1, group: 2 }, _prefix: :type
end
然后你就可以使用这些范围为:
tester.type_group! tester.type_group? # => true
Tester.type_group # SELECT "testers".* FROM "testers" WHERE "testers"."tester_type" = $1 [["tester_type", 2]]
# or,
Tester.where(tester_type: :group) # SELECT "testers".* FROM "testers" WHERE "testers"."tester_type" = $1 [["tester_type", 2]]
以上是 Rails - 使用ActiveRecord :: Enum的参数错误 的全部内容, 来源链接: utcz.com/qa/261211.html