2017-12-20 6 views
0

So habe ich zwei Formulare zum Erstellen von Objekten. Ich kann Owner mit nur einem name erstellen. Jetzt möchte ich einen Listing mit einem name erstellen und es einem Owner zuweisen. Ich kann eine neue Listing erstellen, wenn ich nicht die 1-n-Beziehungen eingerichtet habe, aber wenn ich Listingbelongs_to :owner das Formular nicht mehr funktioniert.Formular schlägt fehl, neues untergeordnetes Objekt mit Mongoid 1-n-Referenz zu erstellen

Modelle:

class Owner 
    include Mongoid::Document 
    has_many :listings 

    field :name, type: String 

end 


class Listing 
    include Mongoid::Document 
    belongs_to :owner 

    field :name, type: String 

end 

Form:

<%= form_for @listing do |f| %> 
    <div class="form-group"> 
    <%= f.label :name, "Listing Name" %> 
    <%= f.text_field :name, class: "form-control" %> 
    </div> 
    <div class="form-group"> 
    <%= f.label :listing, "Owner" %> 
    <%= f.collection_select :owner_id, Owner.all, :id, :name, prompt: true %> 
    </div> 
    <%= f.submit class: "btn btn-primary" %>  
<% end %> 

Controller:

def new 
    @listing = Listing.new 
end 

def create 
    @listing = Listing.new(listing_params) 

    if @listing.save 
     redirect_to @listing, notice: "Listing Creation >> SUCCESS" and return 
    end 
    render :new 
end 



private 

    def listing_params 
     params.require(:listing).permit(:name, owner_attributes: [:name]) 
    end 

Meine Form richtig in dem Sinne erzeugt, dass ich das Feld bekommen einen Namen und ein Drop-Down eingeben Liste mit jedem Owner, aber das Formular erstellt nicht die neue Listing . Ich verstehe nicht, denn wenn ich die has_many und belongs_to Relationen entfernen, funktionieren die Formulare und die Objekterstellung in Ordnung.

Bitte denken Sie daran, dass ich diese sehr sehr neu bin :)

Dank!

Antwort

0

nur wenige Änderungen erforderlich hier:

Form:

<%= form_for @listing do |f| %> 
    ... 
    <div class="form-group"> 
    <%= f.label :owner, "Owner" %>  # :owner instead of :listing 
    <%= f.collection_select :owner_id, Owner.all, :id, :name, prompt: true %> 
    </div> 
    ... 
<% end %> 

Controller:

def create 
    @listing = Listing.new(listing_params) 

    if @listing.save 
    redirect_to @listing, notice: "Listing Creation >> SUCCESS" and return 
    else 
    render :new 
    end 
end 

private 

def listing_params 
    params.require(:listing).permit(:name, :owner_id) 
end 

Bitte zurückkehren und fügen Sie die Schienen log für die create Anfrage, wenn es nicht funktioniert.

+0

Wow ... vielen Dank, dass Sie sich die Zeit genommen haben, mir zu helfen !! Das hat es behoben! Ich bin immer noch super neu und ich finde immer wieder, dass ich den Wagen vor das Pferd stelle ... Ich bin froh, dass ich das Problem klar genug kommunizieren konnte, dass du es für mich lösen kannst. Nochmals vielen Dank: D –

Verwandte Themen