我不确定这是否是范围问题,或者只是我在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
答案 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
我认为你错误地交换了两个变量。