2013-04-26 12 views
21

Oto kod moim zdaniem do wywołania częściowej:Przechodząc zmienna częściowe - niezdefiniowanej zmiennej lokalnej lub metoda błędu

<%= render(:partial => "tabs", :locals => {:class_Name => "Science", :y => 36}) %> 

i teraz tutaj jest to, co znajduje się w _tabs.html.erb:

<div> 
<h1> <%= class_Name %> </h1> 
</div> 

Spodziewam wyjście HTML:

<div> 
<h1> Science </h1> 
</div> 

Ale zamiast tego pojawia się błąd:

undefined local variable or method `class_Name' for #<#<Class:0x007f873b156c28>:0x007f873b1f9540> 

mam zamknięte i ponownie Aptana (IDE używam) i ponownym uruchomieniu serwer wielokrotnie

Z góry dziękuję za poświęcony czas.

+0

można wydrukować zawartość 'zmiennej lokalnej y'? – lucke84

+0

Ten problem przydarza mi się, gdy używam symbolu z znakiem "?" Na końcu lub gdy nie wysyłam go na skrót nazwy locale (ponieważ nie chcę wysyłać zawsze tego paramu, więc mam zapytać, czy istnieje przed użyciem). Na przykład: '<% if local_assigns.key? (: Is_active)%>' – alex

Odpowiedz

0

Działa to dobrze ze mną .. gdzie znajduje się twój _tabs.html.erb?

+0

znajduje się w tym samym folderze co widok, który go wywołuje. wszystkie inne znaczniki html z częściowego pokazują się dobrze ... to tylko lokalne zastępowanie zmiennych, które nie przychodzi przez – rishim3

+0

Czy próbowałeś zrestartować swój serwer lub komputer? może to być pomoc lub spróbować wyczyścić pamięć podręczną. To działa dobrze na mnie .. Użyłem twojego kodu i utworzę '_tabs.html.erb w tym samym katalogu' – Lian

+0

Tak, ponownie uruchomiłem oba razy – rishim3

0

spróbować czegoś takiego:

<%= render partial: "form" , locals:{ name_you_want_use_in_partial: @varialble_to_pass } %> 

miałem ten sam problem. Więc zajrzałem do dokumentacji Ruby on Rails - passing local... i użyłem fllowing notacji - teraz to działa :)

47

Zauważyłem, że jeśli nie zawierają „częściowe:” przed moim częściowej ścieżce, tak jak poniżej:

<%= render 'my_partial', :locals => {:class_Name => "Science", :y => 36} %> 

Byłem zobowiązany do użycia znaku krzyżyka + w moim częściowym, aby uzyskać dostęp do pożądanych wartości, jak zauważyli inni.

<div> 
<h1> <%= locals[:class_Name] %> has a y value of <%= locals[:y] %></h1> 
</div> 

Jednak w tym 'częściowe:' przed moim częściowej ścieżce:

<% render partial: 'my_partial', :locals => {:class_Name => 'Science', :y => 36 } %> 

... pozwoliła mi wystarczy zadzwonić wartości hash bezpośrednio.

<div> 
<h1><%= class_Name %> has a y value of <%= y %></h1> 
</div> 

Po prostu o czymś należy pamiętać, ten problem spowodował, że przez jakiś czas próbowałem wysłać mieszanie się mieszkańców na moje częściowe.

+1

Użyłem wielokrotnie składni bez klawisza skrótu, AFAIK, nie ma powodu, dla którego powinieneś być zmuszony do tego (jak sugerujesz). – lucke84

+0

Dzięki @ lucke84, miałem problem ze zrozumieniem, dlaczego muszę podać nazwę skrótu w moim częściowym. Sądzę, że zrozumiałem, dlaczego po graniu z moim kodem więcej, wydaje mi się, że nie określałem "częściowego:" przed moją częściową ścieżką w instrukcji render, która robi różnicę. Zrewidowałem swoją odpowiedź. – MFarmer

+4

Dzięki za to - w moim przypadku również kluczowe było określenie "częściowego". – shedd

18

Jeśli używasz terminu partial: w swoim render, na przykład tak:

<% render partial: 'your_partial', locals: {foo: 'Biggs', bar: 'Wedge'} %>

Wtedy twoi mieszkańcy będą dostępne jedynie jako foo i bar bezpośrednio przystępnie tak:

<%= foo %> //returns Biggs 
<%= bar %> //returns Wedge 

Jeśli jednak jesteś NOT, używając w renderowaniu terminu partials:, na przykład s O:

<% render 'your_partial', locals: {foo: 'Biggs', bar: 'Wedge'} %>

Wtedy twoi mieszkańcy będą dostępne jako członkowie locals, dostępny sposób:

<% locals[:foo] %> //returns Biggs 
<% locals[:bar] %> //returns Wedge 
+0

To jest 'partials:' lub 'partial:'? – alex

+0

to jest 'częściowe:' @alex –

Powiązane problemy