Zrozumienie "magii" Railsów w odniesieniu do renderowania podrzędnych (i przekazywania do nich miejscowych).
Dlaczego to działa:
<%= render "rabbits/form" %>
A ta praca:
<%= render "rabbits/form", :parent => @warren, :flash => flash %>
ale to nie działa:
<%= render "rabbits/form", :locals => { :parent => @warren, :flash => flash } %>
Ale to robi:
<%= render :partial =>"rabbits/form", :locals => { :parent => @warren, :flash => flash } %>
Poza tym, jak mogę sprawdzić te niuanse, żeby nie przeszkadzać ludziom w SO?
ruby-on-rails
partial-views
Meltemi
źródło
źródło
Odpowiedzi:
Krótka odpowiedź jest taka, że metoda render sprawdza pierwszy przekazany argument. Jeśli przekażesz hash (który zawiera
:partial => 'foo', :locals => {blah blah blah}
), przekaże wszystkie argumenty jako hash i odpowiednio je przeanalizuje.Jeśli jako pierwszy argument przekażesz łańcuch, zakłada on, że pierwszy argument jest nazwą częściową, a pozostałą część przekaże jako lokalne. Jednak w tym kolejnym wywołaniu faktycznie przypisuje
:locals => your_locals_argument
, co w tym przypadku jest całością:locals => {locals hash}
, a nie tylko{locals hash}
; tzn. skończysz z:locals => {:locals => {locals hash}}
, a nie:locals => {locals hash}
.Więc radzę po prostu zawsze jawnie przekazywać wartości w ten sam sposób przez cały czas, a nie będziesz mieć problemów. Aby się tego dowiedzieć, przeszedłem bezpośrednio do samego kodu ( actionpack / lib / base.rb ,
render()
metoda w Railsach 2; Rails 3 jest inny). To dobre ćwiczenie.Ponadto nie martw się, że „przeszkadzasz” ludziom w SO. Dlatego ta strona istnieje. Nawet się czegoś z tego nauczyłem.
źródło
jeśli chcesz określić: lokalne, musisz określić: częściowe lub: szablon
powinno działać
źródło
clone https://github.com/rails/rails.git
? Czy jest jakiś lepszy sposób? Przepraszam, ale jestem stosunkowo nowy w RoR i nie znalazłem jeszcze dobrego / łatwego / spójnego sposobu na przeglądanie dokumentacji Rails ... takiej, że jest .http://api.rubyonrails.org/
nie jest łatwo przeszukiwać. a źródłem z git też nie jest ... westchnienieSzczerze mówiąc, wiem tylko o tych przypadkach użycia, ponieważ nadążałem za Railsami przez ostatnie kilka lat i przeczytałem ogłoszenia, że został dodany nowy sposób robienia tego. Często sam się w tym popełniam, ale zwykle łatwo to naprawić.
To jedna z tych części Rails API, które nie zostały dokładnie przemyślane, jeśli o mnie chodzi. Po prostu przez lata gromadził coraz więcej cukru syntaktycznego, nie umniejszając żadnego starego zachowania. Metoda renderowania ma cukrzycę.
Co gorsza, render zachowuje się inaczej w kontrolerze i widoku. Patrzę również na zawartość pierwszego argumentu, aby sprawdzić, czy jest to plik, szablon, akcja czy część. Jeśli zaczyna się od ukośnika, jest to plik lub coś w tym rodzaju.
Jestem zwolennikiem używania krótszej notacji, gdy tylko jest to możliwe. Ponieważ krótkie zapisy całkiem dobrze przekazują zamiar. Czytając go, zwykle robi to, o czym myślisz. Pisanie podszablonów nie jest proste.
źródło
Oto źródło metody renderowania z http://api.rubyonrails.org/classes/ActionView/Rendering.html#method-i-render :
Mam nadzieję, że to pomoże!
źródło