2012-04-03 10 views
7

Ich möchte eine lokale Variable übergeben, die den Ursprung enthält, um auf eine bestimmte Seite zu kommen, diese Variable enthält nur ein Symbol mit dem Wert.Render @object und Locals vs Rendern: Teil

Wenn ich diesen Code verwenden es perfekt funktioniert, ist der Ursprung Variable zugänglich im Teil:

render :partial => "products", :collection => @products, :locals => {:origin => :gallery} 

Aber wenn ich diesen Code verwenden, wird der Ursprung nicht festgelegt und nicht zugänglich im Teil:

render @products, :locals => {:origin => :gallery} 

Was ist der Unterschied hier? Ist die zweite Zeile des Codes nicht die partielle wie die erste Zeile zu rendern?

+0

Sollte es nicht sein ': Einheimische => {: origin => : Galerie} '? – Nick

+0

@Nick in der Tat war dies ein Tippfehler, in meiner Anwendung verwende ich die: local => {: Herkunft =>: Galerie}, so dass das nicht das Problem war. Aber guter Fang! :) – SteenhouwerD

Antwort

8
<%= render @products %> 

Ist in der Tat die Kurzschreibweise für das Rendern einer partiellen. Bei der Kurzschreibensyntax ignoriert Rails jedoch die Variable ": locals". Es gibt mehr dazu in der Rails Guides.

Wenn Sie also zusätzliche Optionen an den Render übergeben möchten, müssen Sie ": partially => ..." angeben. Wenn Sie wissen wollen, warum dies passiert, können Sie sich die Rails source ansehen.

+0

Sie können eine lokale Variable an das Ende von '@ Produkte' übergeben, es funktioniert für mich. –

1

Es gibt eine gute Erklärung hier: Rails: confused about syntax for passing locals to partials

Die kurze Version ist, dass Sie nur :locals im zweiten Beispiel weglassen:

render @products, :origin => :gallery 
+0

Funktioniert definitiv nicht für mich (Rails 3.2.13). Der Link zu der anderen Frage ist hilfreich. Aber ich denke, Ihr Beispiel ist falsch, weil Sie versuchen, die Sammlungsverknüpfung zu verwenden, die Ihnen leider nicht erlaubt, Einheimische zu passieren. Sie denken wahrscheinlich an 'render' product ',: origin =>: gallery' – Arcolye