错误:函数strftime(未知,没有时区的时间戳)不存在

时间:2018-01-18 14:30:51

标签: ruby-on-rails rails-activerecord datetime-format

我正在做一个有预订功能的网站。我希望在我当前的日期有一份预订清单。

我的控制器上有以下代码:

def today
@vlts = Vlt.where("strftime('%d/%m/%Y', date_time) = ?", Time.now.strftime('%d/%m/%Y'))
end

我的观点中有以下代码:

<% @vlts.each do |vlt| %>
  <tr>
    <td><%= vlt.date_time %></td>
    <td><%= vlt.name %></td>
    <td><%= vlt.phone_no %></td>
    <td><%= vlt.no_ppl %></td>
    <td><%= vlt.message %></td>
    <td><%= link_to 'Edit', edit_vlt_path(vlt) %></td>
    <td><%= link_to 'Destroy', vlt, method: :delete, data: { confirm: 'Are you sure?' } %></td>
  </tr>
<% end %>

但是当我在http://localhost:3000/today上运行我的页面时,我收到了以下错误,这让我抓狂了。

  

PG :: UndefinedFunction:错误:函数strftime(未知,没有时区的时间戳)不存在   第1行:SELECT&#34; vlts&#34;。* FROM&#34; vlts&#34;在哪里(strftime(&#39;%d /%m /%Y&#39;,日期......                                              ^   提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。   :SELECT&#34; vlts&#34;。* FROM&#34; vlts&#34; WHERE(strftime(&#39;%d /%m /%Y&#39;,date_time)=&#39; 18/01/208&#39;)

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

strftime是一个Ruby函数。您无法在数据库查询中调用它。如果要将两个时间戳作为查询中的日期进行比较,则需要使用SQL函数,而不是Ruby函数。

请参阅How to compare dates in datetime fields in Postgresql?