2017-01-30 3 views
0

Ziemlich neu bei Rails und haben eine Reihe von Dingen hier ohne Erfolg ausprobiert.Rails geschachtelte Form Erstellen falscher Fremdschlüssel

Mein Problem ist, wenn ich mit dieser geschachtelten Form in die Datenbank posten, eine meiner Tabellen (apartment_images) Beiträge mit dem falschen Fremdschlüssel (Wohnung_ID).

Ich habe eine ziemlich komplexe Modell Beziehung: Ich habe ein Gebäude has_many_through eine andere Tabelle, die sie mit (unter anderem) eine Apartments Tabelle zuzuordnet. Die problematische apartment_images Tabelle gehört zu Apartments.

gekürzter ist unten:

Gebäudemodell

has_many :building_relationships 
has_many :apartments, :through => :building_relationships 
accepts_nested_attributes_for :apartments, allow_destroy: true 

Wohnung Modell

belongs_to :building 
has_many :apartment_images, -> { order(position: :asc) }, dependent: :destroy 
has_many :building_relationships 
has_many :buildings, :through => :building_relationships 

ApartmentImage Modell

belongs_to :apartment 

buildings_controller (excluded neue Methode)

def createNewBuilding 
    @building = Building.new(building_params) 
    @apartment = Apartment.where(building_id: @building.id) 
     #also tried this but results in no id being save: 
     #@apartment = @building.apartments.build(apartment_params) 

if @building.save 
     redirect_to newBuilding_path, notice: "Successfully created building" 
    else 
     render 'newBuilding'#, notice: "ERROR" 
    end 


    if apartment_image_params 
     apartment_image_params[:image].each do |value| 
     @apartment.apartment_images.build({image: value}).save 
      end 
    end 

    end 

def apartment_image_params 
     #also tried adding :apartment_id. didn't work. 
     params.require(:apartment_image).permit(:id, image: []) if params[:apartment_image] 
end 
+0

ich Mißverständnis sein könnte, aber der Fremdschlüssel für apartment_image _should_ apartment_id werden, da jedes Bild zu einem gehört und nur eine Wohnung, und jede Wohnung kann mehrere Bilder haben. Können Sie Ihr Problem näher erläutern? – jjk

+0

im Grunde, wenn ich auf dem Formular submit und überprüfen Sie die Datenbank wird es das Bild oder Bilder, aber wird es mit der falschen apartment_id verbinden (dh nicht die neu erstellte Wohnung aus dem Formular) – Noobprogrammer

+0

Warum verwenden Sie eine 'has_many though:' Beziehung zwischen einem Gebäude und einer Wohnung? sicherlich kann eine Wohnung nicht in mehreren Gebäuden sein? – max

Antwort

0

so habe ich es endlich zur Arbeit gebracht. Ich verstehe nicht ganz, warum das funktioniert hat, was ich getan habe, aber ich werde darüber nachlesen (aber ich bin auch ganz Ohr, wenn es für euch offensichtlich ist :)).

Die Antwort war von der Verwendung eines der/finden/FINDBY Erklärung zur Verwendung von Rails Magie wechseln:

def createNewBuilding 
@building = Building.new(building_params) 
@apartments = @building.apartments 
@apartments.each do |apartments| 
Verwandte Themen