Chcę zmienić rekord, ale nie chcę go najpierw czytać z bazy danych, bo szczerze mówiąc nie widzę sensu. Jest ogromny i przez sieć jest powolny i drogi. Czy można to zrobić (łatwo)?Czy można zmienić rekord w szynach, bez wcześniejszego przeczytania?
Powiedzmy, że mam rekord z 100 polami (dla argumentów sake) i chcę zmienić jedno pole w tabeli. Mam naprawdę złe połączenie z bazą danych (jest to prawdą), ponieważ znajduje się na innym polu i nic nie mogę zrobić, aby to zmienić. Właśnie teraz ściągam rekord i szyny sprawdzają jego zawartość (ponieważ mam zserializowane bity), a następnie zmieniam jedno pole (jedną ze stu w zależności od warunku X) i ponownie zapiszę rekord. Przypuszczam, że ponownie zapisuję cały rekord w bazie danych, nie mając pojęcia, że zmieniłem tylko jeden mały fragment. (ten ostatni bit jest założenie)
teraz, aby zmienić jeden rekord to wysyłanie ogromnej ilości danych przez sieć, a może okazać się, że jestem tylko zmienia jeden mały mała rzecz .. Także to robi dwa zapytania w bazie danych. Najpierw wybierz * następnie aktualizację ..
Moje pytanie ... czy istnieją mądrzejsze klasy bazowe, które robią to dobrze, aby pisać bez czytania?
Na początek mojej głowy sądziłbym, że dla każdego pola zmieniono metodę setera dla zmiany. Podczas zapisywania, chodzić po flagach i gdzie jest prawdziwe ... Czy to się teraz dzieje, jeśli tak, jak mogę z niego skorzystać?
"(ten ostatni bit jest założeniem)" - to fałszywe założenie. ActiveRecord jest wystarczająco inteligentny, aby zapisywać tylko zmienione wartości. To już interally ma flagi, aby śledzić, które zmienione pola. –
Właściwie, spójrz na dokumenty do tego (zwane "Partial Updates" btw) w rzeczywistości tylko w krawędziach i nie są planowane do wydania aż do Rails 4. Może istnieć wtyczka "częściowa aktualizacja" lub klejnot. –
Tak, jest to inteligentna aktualizacja. A jeśli chodzi o znalezienie najpierw, jeśli wiesz, co chcesz zaktualizować, czy znalezienie rekordu z identyfikatorem nie jest stałą operacją czasową? jak duże może być DB? – Shaunak