2012-04-03 11 views
7

Chcę przekazać lokalną zmienną, która zawiera początek, aby przejść do określonej strony, ta zmienna zawiera tylko symbol z wartością.Renderowanie obiektu @ i locals vs render: częściowe

Kiedy używam tego kodu to działa idealnie, zmienna pochodzenie jest dostępny w częściowej:

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

Ale kiedy używam tego kodu, pochodzenie nie jest ustawiony i nie jest dostępna w częściowej:

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

Jaka jest różnica? Czy druga linia kodu nie renderuje częściowego jak pierwsza linia?

+0

Jeżeli nie byłoby ': miejscowi => {: pochodzenie => : galeria} '? – Nick

+0

@ Naprawdę to był literówka, w mojej aplikacji używam: locals =>: źródło:> galeria}, więc to nie był problem. Ale dobrze złap! :) – SteenhouwerD

Odpowiedz

8
<%= render @products %> 

Jest rzeczywiście skróconą składnią do renderowania częściowego. Ale ze skróconą składnią, Railsy zignorują zmienną ": locals". Więcej informacji na ten temat można znaleźć w artykule Rails Guides.

Jeśli więc chcesz przekazać dodatkowe opcje do renderingu, musisz podać ": partial => ...". Jeśli chcesz wiedzieć, dlaczego tak się dzieje, możesz rzucić okiem na Railsy source.

+0

możesz przekazać lokalną zmienną na końcu '@ products', która działa dla mnie. –

1

Jest to dobre wyjaśnienie tutaj: Rails: confused about syntax for passing locals to partials

Krótka wersja jest taka, że ​​można po prostu pominąć :locals w drugim przykładzie:

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

Zdecydowanie nie działa dla mnie (Rails 3.2.13). Pomocne jest łącze do drugiego pytania. Ale myślę, że twój przykład jest błędny, ponieważ próbujesz użyć skrótu do zbierania, który niestety nie pozwala ci przekazać lokalnego. Prawdopodobnie myślisz o produkcie "render" ",: origin =>: gallery' – Arcolye