Domanda

Ho i seguenti 4 modelli

Hotel (name)
  has_one :address
  has_one :contact
  has_one :bank_account
  validates_presence_of :name
  def build_dependencies
    build_contact
    build_address
    build_bank_account
  end

Address (phone, street_address, hotel_id)
  belongs_to :hotel
  validates_presence_of :phone, :street_address

Contact (name, email, hotel_id)
  belongs_to :hotel
  validates_presence_of :name, :email

BankAccount (name, number, hotel_id)
  belongs_to :hotel
  validates_presence_of :name, :number

In un modulo utilizzato per creare un hotel, prendo input sia per il nome che per l'e -mail per il modello di contatto, ma solo telefono per il modello di indirizzo.

HotelController#new
  @hotel = Hotel.new
  @hotel.build_dependencies #this creates empty Contact and Address to generate the form fields
  #render the form to create the hotel

HotelController#create
  #receive form data
  @hotel = Hotel.new
  @hotel.build_dependencies
  @hotel.save :validate => false
  @hotel.attributes = params[:hotel]
  @hotel.save :validate => false

Questo è l'unico modo in cui sono stato in grado di creare un hotel con informazioni di contatto, telefono da indirizzo e conto bancario vuoto. Ho dovuto chiamare

@hotel.save :validate => false

La prima volta per salvare l'istanza dell'hotel con istanze vuote di BankAccount, indirizzo, contatto. Quindi ho dovuto aggiornare_attributes su contatto e indirizzo e poi

@hotel.save :validate => false

Per garantire che i dati del modulo originale siano stati salvati completamente come previsto.

Questo, al di là del dubbio, è un brutto pezzo di codice. Qualcuno può dirmi come ripulirlo?

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top