У меня есть следующие 4 модели
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
В форме, используемой для создания отеля, я беру ввод для имени и адреса электронной почты для модели контакта, но только для телефона для модели адреса.
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
Это единственный способ создать гостиницу с контактной информацией, телефоном с адреса и пустым банковским счетом.Мне пришлось позвонить
@hotel.save :validate => false
в первый раз, чтобы сохранить экземпляр отеля с пустыми экземплярами BankAccount, Address, Contact.Затем мне пришлось обновить update_attributes для контакта и адреса, а затем
@hotel.save :validate => false
, чтобы гарантировать, что исходные данные формы были сохранены полностью, как и ожидалось.
Это, без сомнения, очень плохая частькод.Может кто-нибудь сказать мне, как это убрать?