我有一张这样的表:
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.
我做错了什么?
答案 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)