【发布时间】:2012-06-09 08:26:47
【问题描述】:
我正在建立一个活动列表网站。目前每个事件都输入特定日期并按顺序显示......简单!但是,我需要考虑如何处理跨越多个日期的节日和戏剧等事件。在每个日期一遍又一遍地输入事件显然不是最好的选择。我以为我可以有一个开始日期和结束日期,但我不确定如何让事件在我的索引中显示开始/结束之间的日期。这可能真的很简单,但我只是想在我可能走上错误的道路之前,我应该为那些有更多经验的人寻求一些指导。
目前的事件架构:
create_table "events", :force => true do |t|
t.date "event_date"
t.string "headline"
t.text "info"
t.integer "event_type_id"
t.integer "venue_id"
t.datetime "created_at"
t.datetime "updated_at"
t.string "event_image_file_name"
t.string "event_image_content_type"
t.integer "event_image_file_size"
t.datetime "event_image_updated_at"
t.boolean "free"
end
我的事件控制器索引确实:
@events = Event.paginate(:page => params[:page], :per_page => 12).find(:all, :conditions => ['event_date >= ?', Date.today], :order => "event_date")
编辑: 我应该指出,我在事件控制器索引方法中列出了带有由以下行生成的日期标题的事件:
@events_dates = @events.group_by { |e| e.event_date }
视图大致如下:
<% @events_dates.sort.each do |event_dates, events| %>
<div class="well">
<h3>
<% if event_dates == Date.today %>
Today
<% elsif event_dates == Date.today + 1 %>
Tomorrow
<% else %>
<%= event_dates.to_date.to_formatted_s(:my_format) %>
<% end %>
</h3>
</div>
<%= render events %>
<% end %>
事件部分有事件标题、信息等。
所以,我认为我需要做的是改变循环浏览日期标题的方式。我不需要从数据库中对事件日期进行分组然后循环这些日期,而是几乎需要遍历日历日,并根据 event_start_date 和 event_end_date 查看事件是否在这些日期发生。有什么想法可以解决这个问题吗?
【问题讨论】:
-
“我不确定如何让事件在我的索引中显示开始/结束之间的日期” - 这是什么意思?你想让它显示什么?看起来它正在显示即将发生的事件。您希望它显示所有未完成的事件吗?如果是这样,请使用两个字段,将单日事件的开始日期和结束日期设置为同一天,并将条件更改为
end_date <= ?, Date.today或类似的内容。 -
另外,不推荐使用带有条件的散列。您需要在某个时候更新 Rails 3 的语法。
-
感谢条件指针....我会尽快更新。回答您的第一个问题;目前,即将举行的活动将显示活动日期,但例如我有一个在 1 日至 3 日发生的活动,如何使我的列表显示“活动 A - 2nd MM YYYY”。我实际上已经对日期标题进行了分组,所以我希望它显示在第 1、第 2 和第 3 下。可能很容易....我会在使用结束日期方面有所突破!
标签: ruby-on-rails ruby-on-rails-3 activerecord