首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >新鲜Rails-4.1.0rc1控制器索引抛出未定义方法`to_sym‘用于nil:NilClass

新鲜Rails-4.1.0rc1控制器索引抛出未定义方法`to_sym‘用于nil:NilClass
EN

Stack Overflow用户
提问于 2014-03-16 23:47:17
回答 2查看 349关注 0票数 1

当我用rails和sqlite创建一个新的应用程序并启动服务器和控制器的索引操作时,即使没有创建记录,它也不会抛出零错误。但是我使用mongoid做同样的操作,并导航到index操作,得到未定义的方法`to_sym‘for nil:NilClass。在控制器索引操作中,我尝试使用Message.all.to_a,但是仍然抛出了错误,我尝试了Message.all.entries,但是仍然引发了错误。

例如,我用Mongoid-4创建了一个新的Rails-4.1.0.rc1应用程序,因为我指向github上的mongoid,应用程序使用*ruby2.1.0p0*

然后,我使用脚手架生成器创建一个只有一个字段的模型,如下所示:

代码语言:javascript
复制
rails g scaffold message body:text

现在,当我启动rails服务器和导航门到**localhost:3000/messages时,我得到:

代码语言:javascript
复制
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:

代码语言:javascript
复制
  <% @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 %>

这是模型

代码语言:javascript
复制
class Message
  include Mongoid::Document
  field :body, type: String
end

控制员:

代码语言:javascript
复制
 class MessagesController < ApplicationController

   def index
      @messages = Message.all
   end
 end

路线

代码语言:javascript
复制
resources :messages
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-17 13:28:06

该bug似乎是一个mongoid错误,使得它无法很好地使用rails 4.1.0.rc1。我之所以知道这一点,是因为按照相同的步骤创建了两个不同的rails应用程序,使mongoid版本保持不变,即mongoid指向master。然后,我使用rails 4.0.4作为应用程序,rails 4.1.0.beta 2作为另一个应用程序。这两个应用程序都按预期工作,即导航到索引页时,即使数据库中没有记录,也不会抛出错误。

因此,解决方案是降级到早期版本的rails。

票数 1
EN

Stack Overflow用户

发布于 2014-03-17 00:05:44

使用这个

代码语言:javascript
复制
<% unless @messages.nil? %>
<% @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 %>
<% end %>

@messages似乎被设定为零。这意味着Message.all将返回零。在messages表中没有任何记录。

编辑

这似乎是rails 4.1.0.rc1版本中的一个问题。使用稳定的Rails构建来尝试相同的代码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22444705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档