2013-05-22 13 views
5

Co robię nieprawidłowo, to daje mi pustą tablicę z tego polecenia?Dlaczego mój Model.where() zwraca pustą tablicę (gdy jestem pewien, że są dopasowania)?

Item.where(:load_date => Date.today + 2) 

Oto moja Szyny konsoli:

.9.3-p194 :024 > Item.first.load_date 
Item Load (0.3ms) SELECT "items".* FROM "items" LIMIT 1 
=> Fri, 24 May 2013 
1.9.3-p194 :025 > Item.where(:load_date => Date.today + 2) 
Item Load (0.5ms) SELECT "items".* FROM "items" WHERE "items"."load_date" = '2013-05-24' 
=> [] 
1.9.3-p194 :026 > Item.first.load_date == Date.today + 2 
Item Load (0.3ms) SELECT "items".* FROM "items" LIMIT 1 
=> true 

Element Model:

... 
# load_date  :date 
... 

class Item < ActiveRecord::Base 
attr_accessible :bt_num, :dept, :formula, :item_code, :load_date, :prod_comments, :qc_comments, :qc_tech, :qty_in_kg, :qty_in_liters, :rm_ok_by, :series, :status, :time_to_produce, :vat 
... 
+0

Jaka jest wartość 'load_date' w bazie danych? – xdazz

+0

Jaka jest twoja baza danych? Testowałem tutaj na mysql i działało –

+0

Datebase to sqlite3. Item.first.load_date == Fri, 24, May 2013 i klasa "Date" – collenjones

Odpowiedz

1

Spróbuj te

Item.where(:load_date => (Date.today + 2).strftime) 
    or 
Item.where("Date(load_date) =?", (Date.today + 2).strftime) 
+0

Drugi działa, ale nie pierwszy (pierwszy wciąż zwraca wartość pustą). Dlaczego formatowanie daty ma znaczenie? A dlaczego nie pierwsze? – collenjones

+0

load_date jest kolumną datetime, ale chcemy tylko Date z tego miejsca, więc użyłem Date (load_date) .... i strftime użyte, ponieważ konwertuje (Date.today + 2) na format "2013-05-24" i w bazie danych wartości są zapisywane jako "2013-05-24 12:12" zamiast "fridat 24 maja 2013 r." –

+0

Dlaczego zamiast Item.first.load_date nie zobaczyłem "2013-05-24 12:12" zamiast " Pt, 24 maja 2013 r. "? Kiedy sprawdzam klasę Item.first.load_date, jest to również "Data". Doceniam pomoc, staram się tylko zrozumieć, co się dzieje. – collenjones

Powiązane problemy