Rails使用查询构建对象

时间:2014-02-26 04:41:27

标签: ruby-on-rails function methods

为什么我不能这样做?

  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添加到该对象。

2 个答案:

答案 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?