我有一个模块,当整理数据以在视图中显示时,我想使用它。在终端方面,我尝试将模块从这样传递参数时发生NilClass错误
> include BeforeOrAfter
> s = s.Artist.find(1)
> s.events.each do |event|
> before_or_after(event)
> end
这导致了错误NoMethodError: undefined method '<<' for nil:NilClass
。 这里是我的模块:
module BeforeOrAfter
attr_reader :past
attr_reader :future
require "date"
def initialize
@datetime = DateTime.new
@future = []
@past = []
end
def before_or_after(event)
if event.date < DateTime.now
@past << event.id
else
@future << event.id
end
end
end
编辑:在控制台各地的发挥,并试图这样,它的作品。现在为什么在将所有东西都交给模块处理时不工作?
> include BeforeOrAfter
> s = s.Artist.find(1)
> @f = []
> @p = []
> s.events.each do |event|
> if event.date < DateTime.now
> @p << event.id
> else
> @f << event.id
> end
> end
> @f
=> [17]
仍然是一样的错误 – sivanes
你在这里的基础实现似乎在IRB中适用于我。我将它包含在一个对象中,提供一个定义了日期属性的OpenStruct,它不会引发错误。所以是的,我的初步答案可能不正确:) 当我喂食obj.before_or_after OpenStruct但没有定义日期时,它确实返回了'NoMethodError:未定义的方法'<'为nil:NilClass'错误。我意识到你将错误报告为'<<',只是再次检查这不是同一个问题。如果是这样,那么你可能想检查你的事件对象,并确保他们有一个日期属性。 – josh
如果我将'.date'取出并使其成为'如果事件
sivanes