Ich habe Probleme, eine has_many: through-Assoziation zu bekommen, die mit den starken Parametern von Rails 4 arbeitet. Ich habe ein Modell namens Checkout
und ich muss eine Person aus dem Employee
Modell in der neuen Checkout-Formular auswählen. Auscheckvorgänge und Mitarbeiter werden über ein Employment
-Modell verknüpft.Wie verwendet man Rails 4 starke Parameter mit has_many: through association?
Ich erhalte diese Störung, wenn ich versuche, eine neue Kasse zu erstellen:
NoMethodError in CheckoutsController#create
undefined method `employee' for #<Checkout:0x007ff4f8d07f88>
Es scheint, dass mit etwas falsch gibt es entweder meine schaffen Aktion, meine Kasse Parameter oder meine neue Kasse Form. Hier ist die Aktion erstellen:
def create
@user = current_user
@checkout = @user.checkouts.build(checkout_params)
respond_to do |format|
if @checkout.save
format.html { redirect_to @checkout, notice: 'Checkout was successfully created.' }
else
format.html { render action: 'new' }
end
end
end
Meine Kasse params:
def checkout_params
params.require(:checkout).permit(:job, :employee_ids, :shift, :date, :hours, :sales, :tips, :owed, :collected, :notes)
end
Meine neue Kasse Form:
<div class="field">
<%= f.label :employee %><br>
<%= f.collection_select(:employee_ids, Employee.all.collect, :id, :full_name, {:prompt => "Please select"}) %>
</div>
Aber ich kann nicht herausfinden, was mit Rails 4 und stark verändert hat Parameter. In Rails 3 funktionierte diese Art von Assoziation und Form für mich mit attr_accessible anstelle von strong_parameters.
Relevante Dateien
Voll Trace des Fehlers: https://gist.github.com/leemcalilly/0cb9e2b539f9e1925a3d
models/checkout.rb: https://gist.github.com/leemcalilly/012d6eae6b207beb147a
Controller/checkouts_controller.rb: https://gist.github.com/leemcalilly/a47466504b7783b31773
views/checkouts/_form.html.erb
models/employee.rb: https://gist.github.com/leemcalilly/46150bee3e6216fa29d1
Controller/employees_controller.rb: https://gist.github.com/leemcalilly/04f3acdac0c9a678bca8
models/employment.rb: https://gist.github.com/leemcalilly/6adad966dd48cb9d1b39
db/schema.rb: https://gist.github.com/leemcalilly/36be318c677bad75b211
Mit dem gleichen Problem. Ich denke, das Problem ist, dass, anstatt nur die Mitarbeiter-ID einzureichen, Collection select diese in einen Hash-Code umwandelt. in Ihrem Fall "employee_ids" => {"employee_id" => "1", "employee_id" => "1"}. Ich wette, wenn Sie Ihr Protokoll überprüfen, wird es eine Zeile geben, die sagt "unerlaubte Parameter: Mitarbeiter_IDs" oder ähnliches. – ctilley79
Ich denke, das ist die richtige Richtung. Hier ist mein Entwicklungsprotokoll: https://gist.github.com/leemcalilly/cc2a71bef9a1e14fc5e6 Jetzt, wie man das repariert? –
Ich habe meine checkout_params auf diese https://gist.github.com/leemcalilly/a71981da605187d46d96 aktualisiert, und jetzt bekomme ich einen 'Unpermitted Parameter' wie Sie hier sehen können: https://gist.github.com/leemcalilly/ef0a58695b7318f068ab –