Rails と sqlite を使用して新しいアプリを作成し、サーバーを起動してコントローラーのインデックス アクションに移動すると、レコードが作成されていない場合でも nil エラーがスローされません。しかし、mongoid で同じことを行い、index アクションに移動すると、nil:NilClass に対して未定義のメソッド「to_sym」が得られます。コントローラー インデックス アクションで、Message.all.to_aを使用しようとしましたが、エラーがまだスローされ、Message.all.entriesを試しましたが、エラーがまだ発生します。
たとえば、Mongoid-4 を使用して新しい Rails-4.1.0.rc1 アプリを作成しました。これは、github で mongoid マスターを指しており、アプリが * ruby 2.1.0p0 *を使用しているためです。
次に、足場ジェネレーターを使用して、以下に示すように、フィールドが 1 つだけのモデルを作成しました。
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