2013-04-04 71 views
0

地圖我作出選擇ActiveRecord的和回報率

m_repeats = Event.where(:repeat => 'monthly').where("schedule < ?", date.end_of_month) 

然後我需要改變shedule(它是日期字段)中的每個元素。

我嘗試這樣做:

m_repeats.map{ |elem| elem.schedule.year = date.today.year, elem.schedule.month = date.today.month } 

但我得到的錯誤:

Mysql2::Error: Unknown column 'schedule' in 'where clause': SELECT `events`.* FROM `events` WHERE `events`.`repeat` = 'monthly' AND (schedule < '2013-04-30') 

或 未定義的方法`時間表」爲#

什麼是做正確的方式?

+1

您已確認的事件表在schema.rb時間表場「shedule」「計劃」?你能訪問Event.first.schedule嗎? – Frans 2013-04-04 11:01:05

+0

是的。 create_table「events」,:force => true do | t | t.string 「標題」 t.date 「shedule」 t.integer 「user_id說明」 t.datetime 「created_at」,日期null =>假 t.datetime 「的updated_at」,日期null =>假 噸。字符串「重複」 結束 另外我的「Where(...)」選擇正常工作,並且只在添加映射代碼時看到錯誤 – Gabi 2013-04-04 11:04:42

+0

是的,但是'map'不是您獲取db的原因錯誤,看起來像第二個「where」。 – Frans 2013-04-04 11:11:39

回答

3

儘量只使用一個WHERE語句像

m_repeats = Event.where('events.repeat = ? AND events.schedule < ?', 'monthly', date.end_of_month) 

或明確命名的時間表列查詢的表像

m_repeats = Event.where(:repeat => 'monthly').where("events.schedule < ?", date.end_of_month) 

我不認爲你的地圖方法導致這個問題,因爲事件的選擇發生在地圖方法的調用中,那麼你在選擇查詢中會遇到一個明顯的問題。

+0

第一個代碼 - Mysql2 :: Error:未知列'events.schedule'in 'where子句':SELECT'events'。* FROM'events' WHERE(events.repeat ='monthly'AND events.schedule <'2013-04-30') – Gabi 2013-04-04 11:09:43

+0

m_repeats = where('repeat =?AND schedule <? ','monthly',date.end_of_month)返回Mysql2 ::錯誤:您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第1行附近'='monthly'AND schedule''2013-04-30')'使用正確的語法:SELECT'events'。* FROM'events' WHERE重複='每月'和時間表''2013-04-30') – Gabi 2013-04-04 11:10:11

+1

好的,在這種情況下,你應該再次檢查你的數據庫1)是否所有的遷移完成2)你的模式是否正確3)你是否重新加載你的控制檯,如果你正在使用控制檯 – anka 2013-04-04 11:12:20

0

這是真的語法錯誤:)代替