nie mając dużo szczęścia ostatnio z odpowiedziami w Stackoverflow (myślę, że jestem królem udzielania TUMBLEWEED), ale i tak tu idzie:Szyny aktualizacji tylko puste pola
Jak mogę aktualizować tylko pola, które są puste podczas korzystania z activeRecord? Mam ten kod:
master_info.update_attributes({:originalTitle => slave_info.originalTitle,
:starring => slave_info.starring,
:theatrical => slave_info.theatrical }
i chciałby coś takiego:
master_info.update_attributes({:originalTitle => slave_info.originalTitle, if !master_info.originalTitle.present?
:starring => slave_info.starring, if !master_info.starring.present?
:theatrical => slave_info.theatrical if !master_info.theatrical.present? }
mogę to zrobić jedną linię na raz, ale staram się unikać tego:
master_info.update_attributes(:originalTitle => slave_info.originalTitle) if !master_info.originalTitle.present?
I przeczytaj coś w stylu:
master_info.update_attributes({:originalTitle => slave_info.originalTitle,
:starring => slave_info.starring,
:theatrical => slave_info.theatrical }.reject{ |key, value| value.present?})
Ale to nie działa, nie aktualizuje niczego, nawet pustych pól.
W rzeczywistości, idealnym rozwiązaniem byłoby nie powtarzanie nazw pól, ponieważ wszystkie one są takie same zarówno w systemie głównym, jak i podrzędnym, ale nie mogę wykonać .each na activeRecord. Ale to jest problem wtórny, podstawowym jest aktualizowanie pustych pól.
Oto nadzieję, ten nie otrzyma Tumbleweed :)
Jeśli chcesz zachować oryginalny sposób aktualizacji, powinieneś zdefiniować inną metodę zamiast przeciążania. – ksol
Przykro mi, nie rozumiem. Chcę zaktualizować atrybuty, jeśli są one puste po stronie odbiorczej. Ten kod wygląda na to, że usuwa puste atrybuty z pola przychodzącego. Czy mogę to źle odczytać? – kakubei
Przykro mi, zmieniłem na 'unless read_attribute (attr) .empty?'. –