2016-04-23 5 views
0

Ich versuche, Kollaborateuren zu Wikis hinzuzufügen, aber ich kann anscheinend nicht in der Lage sein, die wiki_id zum Collaborator-Modell hinzuzufügen. Fehle ich etwas, ich render das _form teilweise in die Wiki-Show-Ansicht.Fehlendes Wiki_id zum Collaborator-Modell

Ich erhalte

<Collaborator id: 20, user_id: 9, wiki_id: nil, > 

Mitarbeiter _controller

def create 
    @wiki = Wiki.find(params[:wiki_id]) 
    @collaborator = @wiki.collaborators.build(collaborator_params)  
    if @collaborator.save 
    flash[:notice] = "You Added a collaborator" 
    else 
    flash[:alert] = "Was not about to add collaborator. Please try again" 
    end 
    redirect_to wiki_path(@wiki) 
end 

def collaborator_params 
    params.require(:collaborator).permit(:user_id, :wiki_id) 
end 

_form Teil

<%= form_for [wiki, collaborator] do |f| %> 
<div class="form-group"> 
    <%= f.label :Premium %> 
    <%= f.select :user_id, options_from_collection_for_select(User.premium, "id", "username") %> 
    <%= f.submit "Save", class: 'btn btn-default' %> 
</div> 

<% end %> 
+0

können Sie 'collaborator_params' Methode zur Verfügung stellen? –

+0

'params.require (: Mitbearbeiter) .permit (: user_id,: wiki_id)' –

+0

entfernen 'wiki_id' aus Argumenten von' permit' –

Antwort

1

Der Code @collaborator für den Bau sollte sein:

Wenn die Beziehung wiki has_one collaborator ist:

@collaborator = @wiki.build_collaborator(collaborator_params) 

Wenn die Beziehung wiki has_many collaborators ist:

@collaborator = @wiki.collaborators.build(collaborator_params) 

Da ich die collaborator_params in Ihrem Code denken wiki_id param fehlt, weshalb Ihr neuer Mitarbeiter fehlt wiki_id. Machen Sie es einfach, verwenden Sie build_collaborator, um neue Mitarbeiter zu erstellen, die wiki_id wird automatisch zugewiesen werden!

+0

es ist ein 'has_many' Modell. und updated @ wiki.collaborators.build (collaborator_params) jetzt im Getting 'Erstes Argument in Form kann nicht nil oder leer sein' für '<% = form_for [wiki, collaborator] do | f | %> ' –

+0

Dies ist ein weiteres Problem in Ihrem Code, bitte aktualisieren Sie Ihren Controller und sehen Sie im Detail die letzte Zeile Ihres Controller-Codes' <% = render partially: 'collaborators/form', lokal: {wiki: @wiki, collaborator : @collaborator}%> 'ist sowieso nicht relevant für den Controller! –

+0

Sorry, ich bin nicht immer gut darin, Fragen zu stellen, aber ich habe den Controller aktualisiert und die Render-Teilzeile entfernt –

0

erwähnt wie von @Hieu Pham wiki_id in params fehlt, aber Sie können wie hinzufügen wiki_id

@wiki = Wiki.find(params[:wiki_id]) 
@collaborator = Collaborator.new(collaborator_params) 
@collaborator.wiki_id = @wiki.id 
@collaborator.save 
..... 

... 
+0

Ich habe es auf @collaborator = @ wiki.collaborators aktualisiert.build (collaborator_params) aber jetzt bekomme ich 'Erste Argument in Form kann nicht enthalten oder leer sein 'für _form –

+0

@MiguelAngelQuintana Versuchen Sie meine Lösung mit Code, den Sie mit dieser Frage hinzugefügt, die für Sie funktioniert – Thorin

+0

Ich bekomme immer noch den gleichen Fehler –