获取错误"功能周(没有时区的时间戳)不存在"

时间:2014-04-05 03:32:43

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

我正在关注此示例How do I change the records being displayed on the page with buttons on the page (RoR)并设法让Daily过滤器正常工作,但在尝试为每周过滤器设置时我得到了错误 PG ::错误:错误:函数周(没有时区的时间戳)不存在

我认为WEEK功能应该像DATE功能那样自动工作,但事实并非如此。

模型

def self.popularToday
    reorder('votes desc').find_with_reputation(:votes, :all, { :conditions => ["DATE(microposts.created_at) = DATE(NOW())"]})
end
def self.popularWeekly
    reorder('votes desc').find_with_reputation(:votes, :all, { :conditions => ["WEEK(microposts.created_at) = WEEK(NOW())"]})
end

index.html.erb

<form action="" method="get">
  <fieldset>
     <button type="submit" name="show" value="daily">Today</button>
     <button type="submit" name="show" value="weekly">This week</button>
  </fieldset>
</form>

控制器

when "daily"
          Kaminari.paginate_array(Micropost.popularToday).page(params[:page]).per(25)
when "weekly"
          Kaminari.paginate_array(Micropost.popularWeekly).page(params[:page]).per(25)

2 个答案:

答案 0 :(得分:2)

你需要:

"SELECT EXTRACT(WEEK FROM TIMESTAMP  microposts.created_at)"

这将根据postgres中的时间戳创建的周数来检索周数。

文档:http://www.postgresql.org/docs/9.3/static/functions-datetime.html

答案 1 :(得分:1)

具有我的时间戳但没有时区数据的表的名称称为create_date。我使用了EXTRACT(WEEK FROM create_date),并且有效。