Rails_admin未定义的方法`association'为nil:NilClass

时间:2016-04-28 10:13:04

标签: ruby-on-rails mongoid

我有这些模特:

Class A 
   embeds_many :b
end

Class B
   belongs_to :c
end

Class C
end

我正在使用rails_admin和mongoid。在admin中,当我在创建A实例时尝试检索C记录列表时,我收到此错误:

这只发生在没有开发的生产环境中

NoMethodError (undefined method `associations' for nil:NilClass):
      /home/pablo/.rvm/gems/ruby-2.3.0@mh-backend/bundler/gems/rails_admin-355dc80f8a20/lib/rails_admin/adapters/mongoid/abstract_object.rb:10:in `initialize'
      /home/pablo/.rvm/gems/ruby-2.3.0@mh-backend/bundler/gems/rails_admin-355dc80f8a20/lib/rails_admin/adapters/mongoid.rb:24:in `new'
      /home/pablo/.rvm/gems/ruby-2.3.0@mh-backend/bundler/gems/rails_admin-355dc80f8a20/lib/rails_admin/adapters/mongoid.rb:24:in `get'
      /home/pablo/.rvm/gems/ruby-2.3.0@mh-backend/bundler/gems/rails_admin-355dc80f8a20/app/controllers/rails_admin/main_controller.rb:138:in `get_association_scope_from_params'

1 个答案:

答案 0 :(得分:2)

看看rails_admin代码,我们可以在 mongoid.rb 文件中看到这段代码。

    def get(id)
        AbstractObject.new(model.find(id))
      rescue => e
        raise e if %w(
          Mongoid::Errors::DocumentNotFound
          Mongoid::Errors::InvalidFind
          Moped::Errors::InvalidObjectId
          BSON::InvalidObjectId
        ).exclude?(e.class.to_s)
      end

如果我们注意这段代码,我们可以看到如果默认情况下文档不存在,model.find(id)必须产生一个Mongoid :: Errors :: DocumentNotFound。

但是,在mongoid中你可以避免在mongo配置文件中使用 raise_not_found_error:true 引发此错误,这会生成nil类的未定义方法。

Tracking issue on github