2017-06-17 50 views
1

我有這樣的一個表:凡符合條件

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

是您的日期列日期時間類型? –

+0

是的,爲什麼? – Difender

回答

1

你可以嘗試 「解析」 你列date到char使用to_char Postgresql函數傳遞列和所需的格式:

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) 
+1

是的,這是它!非常感謝 ! – Difender

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

我想會幫助你

+0

您不需要撥打任何電話。 – bkunzi01