Wenn ich ein Modell mit verschachtelten Attributen bearbeite, funktioniert alles einwandfrei. Wenn ich versuche, einen neuen Datensatz mit verschachtelten Attributen zu erstellen, werden die verschachtelten Attribute nicht in dem Formular mit den verschachtelten Attributen angezeigt. Ich habe zwei Modelle wie folgtVerschachtelte Attribute, die bei der Bearbeitung angezeigt werden, aber nicht beim Erstellen eines neuen Datensatzes in Schienen
class JobSpec < ActiveRecord::Base
has_many :availabilities
accepts_nested_attributes_for :availabilities, allow_destroy: true
end
und
class Availability < ActiveRecord::Base
belongs_to :job_spec
end
im job_specs_controller
Ich habe
class JobSpecsController < ApplicationController
def new
@job_spec = JobSpec.new
@availabilities = Availability.none
availability = Availability.new
availability.job_spec = @job_spec
@availabilities << availability
end
def edit
@job_spec = JobSpec.find(params[:id])
@availabilities = @job_spec.availabilities
end
def job_spec_params
params.require(:job_spec).permit(
... all of the job_spec attributes,
availabilities_attributes: [:id, ... all of the availability attributes],
)
end
end
In _form
für job_spec
Ich habe
<% @availabilities.each do |availability| %>
<%= f.fields_for availability do |builder| %>
<%= render partial: 'availabilities/form_mini',
locals: {f: builder, availability: availability} %>
<% end %>
<% end %>
Da die Bearbeitung funktioniert, nehme ich an, dass es nicht viel falsch ist. Irgendwelche Ideen?
aktualisieren
Ich habe die Probleme fast aussortiert alle, aber immer noch eine haben. Hier ist, was ich getan habe.
1) Ich musste die job_spec
availabilities
bauen. Die neue Aktion des JobSpecsController
sieht nun wie folgt
def new
@job_spec = JobSpec.new
@job_spec.client_id = params[:client_id]
@job_spec.availabilities.build
end
2) Ich wollte das zerstören können, die verschachtelten Modelle, also musste ich :_destroy
in den verschachtelten Attributen job_spec_params
zu übergeben. Das Verfahren sieht wie folgt schließlich
def job_spec_params
params.require(:job_spec).permit(
... all of the job_spec attributes,
availabilities_attributes: [:id, :_destroy, ... all of the availability attributes],
)
end
end
3), hatte ich _form
für job_spec
zu ändern. Ich habe
Das einzige Problem, das ich jetzt habe, ist, dass ich übergeben und Instanz Variable durch meine Verfügbarkeit Teiltage. So etwas wie dieses
<%= render partial: 'availabilities/form_mini', locals: {f: builder, a: availability} %>
Wie sollte das getan werden? Ich bin nicht sicher, wie man beim Rendern aller Teiltöne über alle @availabilities
iterieren.