Rails如何找到定义枚举的位置?

时间:2016-02-26 19:49:55

标签: ruby-on-rails ruby activerecord enums

我最近收到了错误:

You tried to define an enum named "label_type" on the model "Spree::ShippingMethod", but this will generate a instance method "label_type=", which is already defined by another enum.

回溯为我提供了我尝试定义的枚举的位置,但不是第一个定义的枚举。点击我的代码库只会在回溯中显示文件,所以我怀疑它是在一个宝石中,但我不知道如何找到它所在的宝石。

要清楚,我知道我给出的错误意味着枚举已经在其他地方定义了。在解决这个问题的过程中,我试图弄清楚它的定义。

2 个答案:

答案 0 :(得分:1)

它可能在宝石中定义。它可以通过元编程来定义。也许你可以在 Pry 的帮助下找到更多信息:

  • 将'pry'添加到您的Gemfile(并运行bundle install)
  • 在ruby代码中放置“binding.pry”,就在错误发生的位置
  • 之前
  • 运行该应用程序。它将停止在binding.pry命令。
  • 在pry提示符下,键入show-method label_type=
  • 完成后,
  • 键入exit-p!!!以保留 pry

答案 1 :(得分:0)

我认为你已经在该模型中使用了列或实例方法label_type。基本上,当您在列上定义枚举时,它将创建用于设置该列值的读/写方法。仅供参考:请参阅此页http://edgeapi.rubyonrails.org/classes/ActiveRecord/Enum.html