So übergeben Sie mehrere Einheimische an einen verschachtelten Teil

Dies sollte sehr einfach und gut dokumentiert sein, und ich habe es mehrere Male getan, obwohl es etwas gibt, das mich immer noch umbringt.

Ich habe eine Struktur von Partials, die verschachtelte Partials aufrufen.

Irgendwann einmalrender call muss dem Partial eine zusätzliche Variable übergeben, obwohl das Rendern des Partials mit a fehlschlägt:

undefined local variable or method `<variable name>' for #<#<Class:....>

Hier ist mein Code zum Anrufen derrender:

= f.simple_fields_for :orders do |c|
  = render partial: "fields", locals: {f: c, step: f.object.step}

obwohl das auch nicht funktioniert:

= f.simple_fields_for :orders do |c|
  = render "fields", f: c, step: f.object.step

Hier wird die Ausnahme ausgelöst:

f.input :quantity, input_html: {step: step}

das form_for kommt aus demviews/lists/_form.html.haml:

= simple_form_for( @order, :html => { :multipart => true }, defaults: { input_html: { class: 'input-medium' } } ) do |f|

f wird dann an übergebenviews/orders/_order_forms.html über

= render "orders/order_forms", f: f

hier ist die ausnahme mit trace:

    ActionView::Template::Error (undefined local variable or method `step' for #<#<Class:0x007fe0479ba2b0>:0x007fe04256a930>):

application trace:
    app/views/orders/_fields.html.haml:9:in `_app_views_orders__fields_html_haml___1860431911739668171_70300581339300'
    app/views/orders/_order_forms.html.haml:30:in `_app_views_orders__order_forms_html_haml__2241963939037094859_70300612771460'
    app/views/lists/_form.html.haml:48:in `block in _app_views_lists__form_html_haml__1669043093238943449_70300583658680'
    app/views/lists/_form.html.haml:3:in `_app_views_lists__form_html_haml__1669043093238943449_70300583658680'
    app/views/lists/new.html.erb:3:in `_app_views_lists_new_html_erb___1563391577928218041_70300593681100'
    app/controllers/lists_controller.rb:67:in `new'

Framework-Trace (das Ende davon):

actionpack (3.2.8) lib/action_view/template.rb:145:in `block in render'
activesupport (3.2.8) lib/active_support/notifications.rb:125:in `instrument'
actionpack (3.2.8) lib/action_view/template.rb:143:in `render'
actionpack (3.2.8) lib/action_view/renderer/partial_renderer.rb:265:in `render_partial'
actionpack (3.2.8) lib/action_view/renderer/partial_renderer.rb:238:in `block in render'
actionpack (3.2.8) lib/action_view/renderer/abstract_renderer.rb:38:in `block in instrument'
activesupport (3.2.8) lib/active_support/notifications.rb:123:in `block in instrument'
activesupport (3.2.8) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activesupport (3.2.8) lib/active_support/notifications.rb:123:in `instrument'
actionpack (3.2.8) lib/action_view/renderer/abstract_renderer.rb:38:in `instrument'
actionpack (3.2.8) lib/action_view/renderer/partial_renderer.rb:237:in `render'
actionpack (3.2.8) lib/action_view/renderer/renderer.rb:41:in `render_partial'
actionpack (3.2.8) lib/action_view/helpers/rendering_helper.rb:27:in `render'
haml (4.0.3) lib/haml/helpers/action_view_mods.rb:10:in `block in render_with_haml'
haml (4.0.3) lib/haml/helpers.rb:89:in `non_haml'
haml (4.0.3) lib/haml/helpers/action_view_mods.rb:10:in `render_with_haml'
cocoon (1.2.0) lib/cocoon/view_helpers.rb:40:in `block in render_association'

Ich hatte schon einmal ein ähnliches Problem und habe es gelöst, indem ich die Übergabe von Einheimischen vereinfacht habe. Jetzt möchte ich wirklich verstehen, was los ist.

irgendeine Ahnung?

Ich benutze:

ruby 2.0.0p297
rails 3.2.8

Vielen Dank im Voraus..

AKTUALISIEREN

Ich habe meine Sichtweise überprüft und festgestellt, dass dieorder_forms wird zweimal gerendert, das erste Malstep ist nicht gesetzt, während es im zweiten Rendering richtig gesetzt ist.

Ich bin mir nicht sicher, warum dies passiert, aber ich habe es geschafft, die folgende Zeile zu meiner hinzuzufügenfields.html.haml.

-step = step || 1

Grundsätzlich habe ich einen Standardwert für step festgelegt, falls dieser nicht definiert ist, damit das Rendern bei der ersten Ausführung nicht abstürzt, während es bei der zweiten Ausführung ordnungsgemäß funktioniert.

Die Seite sieht jetzt wie erwartet aus. Obwohl ich über die Verschwendung von Ressourcen nachdenke, wenn ich das Zeug zweimal rendere.

Irgendeine Idee, warum das passiert?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage