这是Ruby范围问题吗?

时间:2013-08-21 15:36:04

标签: ruby-on-rails ruby date scope

我不确定这是否是范围问题,或者只是我在Ruby中不熟悉的事情。

我的application_helper.rb中有一个帮助方法,它从数据库中取出事件列表,并确定哪一个最接近当前日期。然后,此方法用于显示事件列表和“特色事件”。

该方法正确评估所有条件,但在循环结束时未正确分配featured_event

我有两个播种活动,一个是“10月31日”,另一个是“8月24日”。

def current_featured_event
  featured_event = Event.all.first #assigns 10/31
  for event in Event.all do
    if event.datetime.to_date < featured_event.datetime.to_date and event.datetime.to_date > Date.today
      event = featured_event #assigns 8/24
    end
  end
  binding.pry
  featured_event #still 10/31
end

2 个答案:

答案 0 :(得分:2)

event = featured_event #assigns 8/24

这会分配event,而非featured_event。此外,event的赋值将在循环的下一次迭代中被覆盖。我想你想要:

featured_event = event #assigns 8/24

答案 1 :(得分:1)

您的event个对象是Active Record对象。这意味着它们存在于数据库中,因此您无法将其分配给另一个数据库。我会做这样的事情:

def current_featured_event
    featured_event = Event.order("datetime DESC").first #assigns 10/31
end

或类似的东西,如果你想要最接近你代码的东西:

def current_featured_event
    featured_event = Event.all.first #assigns 10/31
    for event in Event.all do
        if event.datetime.to_date < featured_event.datetime.to_date and event.datetime.to_date > Date.today
            featured_event = event #assigns 8/24
        end
    end
    binding.pry
    featured_event
end

我认为你错误地交换了两个变量。