我正在关注此示例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)
答案 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),并且有效。