未定义的方法`key?' for nil:使用MongoMapper时的NilClass

时间:2012-06-12 16:26:12

标签: ruby-on-rails ruby mongomapper

我按照these instructions设置了一个新的Rails应用程序。我生成了一个新的控制器并将resources :tickets添加到路径文件中。

Hexapoda::Application.routes.draw do
  resources :tickets
end

这是控制器(`/app/controllers/tickets_controller.rb')。

class TicketsController < ApplicationController
  def index
    @tickets = Ticket.all
  end
end

然后我在Ticket中添加了一个新模型/app/models/ticket.rb

class Ticket
  include MongoMapper::Document

  key :summary, String, :required => true
end

以下是视图(/app/views/index.html.erb):

<h1>Tickets#index</h1>
<p>Find me in app/views/tickets/index.html.erb</p>

现在,当我在浏览器中转到/tickets时,收到错误消息。

  TicketsController #index 中的

NoMethodError      

未定义的方法`键?'为零:NilClass

我不知道发生了什么。可能是什么问题呢?我正在使用Rails 3.2.5和MongoMapper 0.11.1。

3 个答案:

答案 0 :(得分:6)

你需要Master的最新MonoMapper:

gem 'mongo_mapper', github: "jnunemaker/mongomapper"

并运行bundle

说明:Rails 3.2.4为ActiveModel添加了一个accessible_attributes方法,但是MongoMapper已经有了这个;所以他们互相辱骂。

MM问题:Issue 419
MM提交修复:4d35c67

答案 1 :(得分:2)

我上面的Jesse Wolgamott解决方案应该可行,如果没有,你可能会遇到其他错误,非常简单。

对我来说,这个错误:

未定义的方法`键?'为零:NilClass

发生的原因是控制器正在调用并在视图中显示的模型文件中有一个简单的错字。确保在使用 attr_accessible 时不要忘记事物之间的任何逗号。我的问题来自使用像这样的新行字符:

attr_accessible:address_1,:address_2,:city &lt; = COMMA NEEDED :country,:latitude,:longitude,:state,:zip

请务必按照我上面所说的Jesse Wolgamott所做的事情,如果这不起作用或者您已经在运行该版本,请检查您的模型文件是否存在拼写错误。

答案 2 :(得分:0)

这让我有点头疼。我没有安装mongo_mapper gem,但重新启动rails服务器为我解决了这个问题。