向数据库添加可用于指定活动周的日期

时间:2015-03-21 18:10:34

标签: ruby-on-rails ruby date datetime ruby-on-rails-4

我正在创建一个需要非常自主的竞赛应用程序。该应用程序有一个名为“周”的资源。每个星期都有很多参赛作品#39;用户可以在本周添加条目,然后可以对其进行投票。

本周有一个名为' start_date'的数据库专栏。如果我用字符串填充它,例如" 16-03-2015"然后在Show视图中我可以拉入周参数并将字符串与今天的日期进行比较,并设置投票按钮是否有效。

在我的周控制器中,我使用一个名为set_dates的before操作,并设置了几个变量

def set_dates
    @today = Date.today
    @weekstart = Date.parse(@week.active_date)
    @weekend = Date.parse(@week.active_date)+7
end

然后我可以在视图上设置if和else语句,以显示投票按钮,如果周是“活动”,即。今天的日期在active_date + 7天内

<% @entries.each do |entry| %>
    <div class="entry">
        <%= image_tag(entry.photo(:thumb)) %>
        <%= entry.cached_votes_up %>

        <% if (@weekstart..@weekend).include? @today %>
            <%= link_to "Upvote", upvote_week_entry_path(entry.week_id, entry) %>
            <%= link_to "Downvote", downvote_week_entry_path(entry.week_id, entry) %>
        <% end %>
    </div>
<% end %>

这很好,直到我意识到我需要一个活跃的一周&#39;在节目视图之外。我想在application_layout中的导航栏中添加一个链接到本周比赛,我需要本周指向哪一周投票活动。但是如果没有通过ID查找周,那么交叉引用它的active_date,我不确定如何做到这一点。任何帮助将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:0)

如果有其他人发现这个问题要解决类似的问题,我通过在周资源中添加end_date列来解决问题,然后在应用程序控制器中为一个arel查询分配一个变量

应用 - 控制器

  before_action :active_week

  protected

  def active_week
    @aweek = Week.where("? BETWEEN start_date AND end_date", Date.today)
    @active = @aweek.first
  end

应用程序布局

 <%= link_to "This Week", @active %>