私は次の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の空白のインスタンスでHotelインスタンスを初めて保存します。それから私は連絡先と住所のupdate_attributesをしなければならなかったそしてそれから
@hotel.save :validate => false
元のフォームデータが期待どおりに完全に保存されたことを確認します。
これは間違いなく、非常に悪いコードです。誰かがこれをきれいにする方法を教えてもらえますか?