Jak aktualizovat/vytvořit has_one související data efektivně v kolejích

0

Otázka

Ahoj, já jsem učení kolejnice a dostala jsem situace, kdy musím aktualizovat nebo vytvořit data pro has_one souborům model/tabulky.

Zkoušel jsem to

Pracovník.rb

class Worker < ApplicationRecord
  has_one :worker_encrypted_info
end

worker_encrypted_info.rb

class WorkerEncryptedInfo < ApplicationRecord
  belongs_to :worker
end

workers_controller.rb

def update_personal_info
   if @worker.update(update_personal_info_params)
     @worker.create_worker_encrypted_info(sin: params[:worker_encrypted_info][:sin])
   end
end

co teď

@worker.create_worker_encrypted_info(sin: params[:worker_encrypted_info][:sin])

dělá je první aktualizace worker_encrypted_info záznam s worker_id: nil, a potom vytvořit nový záznam pro stejné worker_id namísto aktualizace toho starého. což není příliš velký samozřejmě, protože jsem dont potřebovat worker_id: nil záznam v databázi. proč musím smazat předchozí ručně .zničit kód? je nějaký Efektivní způsob, jak to udělat?

1

Nejlepší odpověď

1

Očekával bych, že to funguje

def update_personal_info
  return unless @worker.update(update_personal_info_params)

  if @worker.worker_encrypted_info  
    @worker.worker_encrypted_info.update(sin: params[:worker_encrypted_info][:sin])
  else
    @worker.create_worker_encrypted_info(sin: params[:worker_encrypted_info][:sin])
  end
end
2021-11-24 11:16:06

co když to není k dispozici? @pracovníka.worker_encrypted_info by dát nula
Prateek Vyas

pokud je přítomen, pak je třeba aktualizovat a pokud ne, pak je třeba vytvořit
Prateek Vyas

to není moc efektivní způsob, jak to udělat, už jsem to zkoušela @spickermann
Prateek Vyas

@PrateekVyas Můžete mi vysvětlit, proč si myslíte, že to není efektivní? Tam je pouze jedno čtení a jeden operaci zápisu do databáze. Nebo dáváte přednost méně kódu? Pak doporučuji dívat se do Aktivní Záznamy Vnořené Atributy.
spickermann

ano přihlásil jsem se nested_attributes věci již nyní.
Prateek Vyas

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................