为什么我不能这样做?
def current_event
@current_event = Event.where(:start_date.lte => current_time, :end_date.gte => current_time).first
@current_event.days_left = days_left_function
return @current_event
end
它返回“No Method”错误......我得到了。我试图在这个对象上调用一个方法?但是如何在rails创建函数中添加到对象?
修改
我很抱歉,但我很困惑你,因为我是新手。
.days_left
没有返回任何方法错误...我只是希望能够在我的视图中调用@current_event.days_left
。
所以,我正在定义@current_event
,我想将days_left
添加到该对象。
答案 0 :(得分:1)
为什么我不能这样做?
因为你发明了一种你想要使用的语法,但它不是基于任何形式的现实吗?你不仅可以编写语法并期望它们起作用。
抓点:大概是你正在使用我不熟悉的Mongoid。如果是这种情况,则错误可能不是因为您在符号上调用.lte
,而是因为where
返回零结果而您在{{1}上调用days_left
}。
如果您没有使用Mongoid,我的原始答案就是:
要询问字段在两个值之间的记录,请使用范围运算符:
nil
要求使用小于或大于或等于的记录,您需要构建自己的查询,并使用Event.where(current_time: start_date..end_date)
将值插入其中:
?
答案 1 :(得分:0)
您应该检查以确保查询结果不是nil。如果Event.where(...)
返回空关联,则.first
将返回nil
。如果您尝试在.days_left
上拨打nil
,则会收到错误消息。
为了防范这种情况,您应该进行nil
检查。类似于以下内容
@current_event = Event.where(:start_date.lte => current_time, :end_date.gte => current_time).first
@current_event.days_left = days_left_function unless @current_event.nil?