#line的未定义方法`enum':0x007f099c303390> </class:0x007f099c303390>

时间:2014-02-11 11:50:48

标签: ruby-on-rails ruby

我在rails中使用并收到以下错误:

undefined method `enum' for #<Class:0x007f03202a1190

模型

class Location < ActiveRecord::Base

   enum status: [ :current, :preffered ]

end

如何删除此错误。

2 个答案:

答案 0 :(得分:8)

ActiveRecord::Enum仅在commit db41eb8a引入了Rails,到目前为止,此提交仅使用Rails标记v4.1.0.beta1发布。

您正在使用的当前Rails gem可能尚未进行此提交,因此没有实现enum的代码。

要查看您拥有的Rails gem版本,请运行:

bundle show rails

我刚刚运行bundle update然后bundle show rails,我正在展示:

[PATH TO YOUR GEMS]/rails-4.0.2

此版本的gem不包含enum的代码。您可以通过comparing what is in v4.0.2 with what is in v4.0.1.beta1查看此信息。如果您点击“文件已更改”,然后在enum.rb页面中进行搜索,您会看到这是完全新添加的代码。

如果您想确保获得新标记的Rails版本,可以修改Gemfile,以便包含rails的行如下所示:

gem 'rails', :git => 'git://github.com/rails/rails.git', :tag => 'v4.1.0.beta1'

执行bundle update之后,您可以通过bundle show rails看到您拥有以下rails gem:

[PATH TO YOUR GEMS]/rails-f706d5f945c5

f706d5f945c5是为发布v4.1.0.beta1标记的提交。

获得Rails gem的最新版本后,您应该可以访问此enum功能。

答案 1 :(得分:3)

您可以通过复制the file rails/activerecord/lib/active_record/enum中的代码以及以下行来使用此功能:

module ActiveRecord
  class Base
    extend ActiveRecord::Enum
  end
end

到您应用的lib/目录,然后require - 在environment.rb文件中。例如:config/environment.rb

require 'active_record_enum'

您可以参考我们在制作中的this code