快速提问。
我在视图中有以下内容
<tbody>
<% @courses.each do |course| %>
<% if course.lec_exam.eql?("LEC")%>
<tr class ="text-center">
<td><%= course.location %></td>
<% if (Time.now > course.begin_time && Time.now < course.end_time)
course.status = 'Taken'
else
course.status ='Open'
end %>
<td><%= course.status %></td>
<td><%= course.begin_time %></td>
<td><%= course.end_time %></td>
<td><%= link_to 'Edit Status', edit_course_path(course) %></td>
</tr>
<% end %>
<% end %>
</tbody>
我测试了这个,begin_time总是等于true,end_time总是等于false。作为参考,我的DB通过以下方式存储列。如果它有所不同,则通过CSV导入值。
t.time "begin_time"
t.time "end_time"
一些示例begin_time和end_time值:
2000-01-01 10:30:00 UTC 2000-01-01 11:20:00 UTC
2000-01-01 11:30:00 UTC 2000-01-01 12:20:00 UTC
所以我可以看到为什么begin_time等于true以及为什么end_time等于false。为什么这些值只有在CSV和DB中存储时才与它们相关联?在CSV中,它们存储为上午10:30,上午11:20等。
任何指针?有什么明显我错过了吗?
答案 0 :(得分:1)
首先,您应该将逻辑移到模型中。 其次,Rails:time数据类型仍然将日期存储到数据库中(即使它没有被使用)。我们必须手动删除日期:
Class Course < ActiveRecord::Base
def status
t = Time.now.utc.strftime("%H%M%S%N")
end_time_f = self.end_time.utc.strftime("%H%M%S%N")
begin_time_f = self.begin_time.utc.strftime("%H%M%S%N")
’if (t >= begin_time_f && (t <= end_time_f)
status = 'Taken'
else
status = 'Open'
end
return status
end
end
然后在您的视图中,您只需拨打course.status
答案 1 :(得分:0)
解决。利用上面的答案,以及'tod'gem,它为Time和DateTime提供to_time_of_day方法。
def status
t = Time.now.to_time_of_day
bt = self.begin_time.to_time_of_day
et = self.end_time.to_time_of_day
if (t >= bt) && (t<=et)
status = 'Taken'
else
status = 'Open'
end
return status
end