当我使用 rails 和 sqlite 创建一个新的应用程序并启动服务器并执行控制器的索引操作时,即使没有创建记录,它也不会抛出 nil 错误。但是我对 mongoid 执行相同操作并导航到索引操作,我得到nil:NilClass 的未定义方法 `to_sym'。在控制器索引操作中,我尝试使用Message.all.to_a但仍然引发错误,我尝试了Message.all.entries但仍然引发错误。
例如,我使用 Mongoid-4 创建了一个新的 Rails-4.1.0.rc1 应用程序,因为我指向 github 上的 mongoid master 并且该应用程序使用 * ruby 2.1.0p0 *
然后我使用脚手架生成器创建了一个只有一个字段的模型,如下所示:
rails g scaffold message body:text
现在,当我启动rails 服务器并导航到 **localhost:3000/messages 时,我得到:
ActionView::Template::Error (undefined method `to_sym' for nil:NilClass):
9: </thead>
10:
11: <tbody>
12: <% @messages.each do |message| %>
13: <tr>
14: <td><%= message.body %></td>
15: <td><%= link_to 'Show', message %></td>
app/views/messages/index.html.erb:12:in `_app_views_messages_index_html_erb__250078575__604951838'
这是 index.html.erb:
<% @messages.each do |message| %>
<tr>
<td><%= message.body %></td>
<td><%= link_to 'Show', message %></td>
<td><%= link_to 'Edit', edit_message_path(message) %></td>
<td><%= link_to 'Destroy', message, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
这是模型
class Message
include Mongoid::Document
field :body, type: String
end
控制器:
class MessagesController < ApplicationController
def index
@messages = Message.all
end
end
路线
resources :messages