0

我不确定这是范围问题,还是我在 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
4

2 回答 2

2
event = featured_event #assigns 8/24

这分配event,不是featured_event。此外,event' 的分配将在循环的下一次迭代中被覆盖。我想你想要:

featured_event = event #assigns 8/24
于 2013-08-21T15:38:26.753 回答
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

我认为您只是错误地交换了两个变量。

于 2013-08-21T15:40:49.817 回答