2017-07-18 6 views
1

Ich habe ein Elternteil "Konten", die viele "Prioritäten" hat.Update Child Association in Ruby on Rails Formular

Ich kann sehr leicht neue Prioritäten für diese Konten erstellen, aber ich kann sie nicht bearbeiten/aktualisieren, sobald ich sie erstellt habe.

Konto-Modell (Eltern):

class Account < ApplicationRecord 
    has_many :priorities 
    accepts_nested_attributes_for :priorities 
end 

Prioritäten Modell (Kind):

class Priority < ApplicationRecord 
    belongs_to :account 
end 

Routen:

resources :accounts do 
    resources :priorities 
    end 

priorities_controller.rb (nur das bearbeiten, aktualisieren und Parameter)

class PrioritiesController < ApplicationController 

    def edit 
    @account = Account.find(params[:account_id]) 
    @priority = @account.priorities.find(params[:id]) 
    end 

    def update 
    @account = Account.find(params[:account_id]) 
    @priority = @account.priorities.update(priority_params) 

    end 

    private 
    def priority_params 
     params.require(:priority).permit(:name, :narrative, :kpis) 
    end 

end 

und schließlich meine edit.html.erb (so diese endet Konten/#/Prioritäten/#/bearbeiten ist)

<%= form_for(@account) do |a| %> 

<%= a.fields_for :priorities, @priority do |p| %> 
    <p> 
    <%= p.label :name %><br> 
    <%= p.text_field :name %> 
    </p> 

    <p> 
    <%= p.label :narrative %><br> 
    <%= p.text_area :narrative %> 
    </p> 

    <p> 
    <%= p.label :kpis, "KPIs" %><br> 
    <%= p.text_field :kpis %> 
    </p> 

    <p> 
    <%= p.submit %> 
    </p> 
<% end %> 
<% end %> 

Alles geht sehr gut bis zu diesem Punkt. Das Formular ruft die Formulardaten für die richtige Priorität perfekt ab und schlägt sogar fehl, wenn Sie versuchen, eine Prioritäts-ID einzugeben, die dieser Konto-ID nicht zugeordnet ist. Allerdings, wenn ich auf „Update-Priority“ erhalte ich:

Now „Die Aktion‚update‘nicht für AccountsController gefunden werden kann“, so kann ich nur den Fehlern folgen und ein Update für diesen Controller erstellen, aber Ich denke nicht, dass es sogar versuchen sollte, den AccountsController auszulösen, es scheint, dass es versuchen sollte, den Prioritätscontroller zu verwenden.

der Tat, wenn ich die Konsole überprüfen, scheint die Anfrage hier gehen zu: Anforderungs-URL: http://127.0.0.1:3000/accounts/2

Es tut mir leid, ich habe die Antwort auf diese Frage für mindestens 10 Stunden suchen und können Ich finde es nicht. Danke für Ihre Hilfe.

+0

Mögliches Duplikat von [form \ _for mit verschachtelten Ressourcen] (https://stackoverflow.com/questions/2034700/form-for-with-nested-resources) – jvillian

Antwort

0

Wie in this Antwort diskutiert und this Antwort, ich glaube, Sie etwas tun müssen, wie:

<%= form_for [@account, @priority] do |f| %> 
    blah blah 
<% end %> 

(Fair-Zuschreibung. Lifted direkt von der zweiten verknüpften Antwort)

Wie Sie weisen darauf hin, dies:

<%= form_for(@account) do |a| %> 

Wird eine URL für die update Aktion auf demerzeugen 10. Denn genau so funktionieren Schienen. Wenn Sie eine URL für die verschachtelte Ressource benötigen, müssen Sie beide Instanzvariablen in die Deklaration form_for aufnehmen.

+0

Ok, also scheint dies die richtige Richtung zu sein Als ich das Update getestet habe, hat es ALLE Prioritäten in diesem Konto geändert - also muss ich etwas falsch mit meinem Controller haben. Vielen Dank. – Jake

+0

Ja, ich habe den Prioritäten-Update-Controller geändert und es hat funktioniert. Ich danke dir sehr! – Jake