我正在为原型做一个小型应用程序。我开始使用名为basejumper
的starterapp快速启动后,我偶然发现了一个非常烦人的问题。在开发模式下,rails在第二次请求后崩溃,即第一次加载页面时,它工作正常,重新加载页面崩溃
"You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.include?"
尝试通过belongs_to关联访问用户对象时发生此问题。在一个视图中,我做了类似的事情,它是使视图崩溃的comment.user.login:
<% @article.comment_threads.each do |comment| %>
<div class="comment">
<%=h comment.body %> | Posted <%=time_ago_in_words(comment.created_at)%>ago
by <%= comment.user.login %>.</div>
<% end%>
我的课程:
class User < ActiveRecord::Base
acts_as_authentic
has_many :articles
has_many :comments
class Comment < ActiveRecord::Base
acts_as_nested_set :scope => [:commentable_id, :commentable_type]
belongs_to :user
class Article < ActiveRecord::Base
belongs_to :user
belongs_to :innovation_target
acts_as_commentable
在我的development.rb配置文件中,我把
config.cache_classes = false
问题消失了,但是我留下了一个服务器,我需要在每次更改后重新启动,这基本上是行不通的。我正在使用rails 2.3.4。
所以我的问题是,我可以以某种方式强迫rails在开发模式下重新加载一些/所有宝石和插件,这样这个问题就消失了吗?或者你看到其他可能性?我使用了许多不同的插件和宝石,包括acts_as_commentable_with_threading,awesome_nested_set和其他。
感谢您的帮助。
PS。我已经查看过像http://www.williambharding.com/blog/rails/automatically-reload-modules-on-change-in-rails/和http://nhw.pl/wp/2009/01/07/reloading-your-plugin-in-development-mode这样的文章,但这些文章似乎并非如此(或者我做错了。)
答案 0 :(得分:1)
经过大量谷歌搜索和检查堆栈跟踪后,我设法解决了这个问题: 在文章http://209.85.129.132/search?q=cache:82jRiVpdYGcJ:www.theirishpenguin.com/2009/01/22/bug-of-the-day-nilinclude-error-with-create_time_zone_conversion_attribute/+create_time_zone_conversion_attribute%3F&cd=1&hl=nl&ct=clnk&gl=be&client=firefox-a中(必须使用谷歌缓存,暂时不加载页面),描述了类似的问题。在评论中,用户stef建议更改configuration.rb文件
config.time_zone = ‘UTC’
to:
config.active_record.default_timezone = :utc
灯塔中实际上有一个记录的轨道问题,描述了这个问题:https://rails.lighthouseapp.com/projects/8994/tickets/1339-arbase-should-not-be-nuking-its-children-just-because-it-lost-interest