条件

时间:2017-06-17 19:26:26

标签: ruby-on-rails where

我有一张这样的表:

Calendar
 - date
 - description
 - userid

我想通过它的用户ID获取用户给定月份的所有事件。

所以我知道要获取用户标识的所有事件是:

Calendar.where(userid: params[:id])

我尝试过(正如我在这里的一些帖子中所看到的那样)

Calendar.where(userid: params[:id]).where("date ~= ?", '%2016-12%')

所以这应该给我从2016年12月开始的所有活动,但我有:

ActiveRecord::StatementInvalid: PG::UndefinedFunction: ERROR:  operator does not exist: date ~= unknown
LINE 1: ...endars" WHERE "calendars"."userid" = $1 AND (date ~= '%2016-...
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

我做错了什么?

2 个答案:

答案 0 :(得分:1)

我认为您的解决方案就在这里

def index
  @events = Calendar.where(userid: params[:id]).all
  @event_months = @events.group_by { |t| t.date.month } // month is a given name
end

请参阅以下链接

https://stackoverflow.com/a/18862762/8175208

我认为会帮助你

答案 1 :(得分:1)

您可以使用传递列和所需格式的date Postgresql函数尝试将列to_char“解析”为char:

SELECT * 
FROM calendars
WHERE to_char(date, 'YYYY-MM-DD') LIKE '%2016-12%'

因此,您可以使用ActiveRecord#find_by_sql

query = "SELECT * FROM calendars WHERE to_char(date, 'YYYY-MM-DD') LIKE '%2016-12%'"
Calendar.find_by_sql(query)