Partial i przekazanie zmiennej

Witajcie,
Mam formularz z którego będe korzystał w kilku widokach dlatego chciałem go zrobić jako partial. W kodzie widoku mam coś takiego

<%= form_for @company, :url => { :action => "create" } do |f|%> <%= render 'shared/company_form',:locals => {:f => f} %> <%= submit_tag("Create") %>
I przy próbie wejścia na stronę dostaję błąd:

undefined local variable or method `f' for #<#<Class:0x00000003d1ef40>:0x000000030fa980>

A tak wygląda partial

[code]


<%= f.label(:name, “Nazwa firmy”) %>
<%= f.text_field(:name) %>
...[/code] I to pierwsze f.label powoduje błąd tak jak by nie widział tej zmiennej. Gdzieś robię jakiś błąd czy inaczej się to robi? Z góry dziękuje za odpowiedź Pozdrawiam Artur
<%= render 'shared/company_form', f: f %>

lub

<%= render partial: 'shared/company_form', locals: {f: f} %>

Z ciekawości: dlaczego nie wsadzić całego forma do partiala? I tak miałbyś tam dostępną zmienną @company, i nie musiałbyś się w’ogle bawić z localsami.

Chociażby z faktu, że formularz może kierować do różnych miejsc (tworzenie, edycja). Stąd zazwyczaj środek wywala się do partiala.

eee…

  = form_for @some_object do |form|

w zależności czy @some_object jest nowym (nie zapisanym w bazie obiektem), czy nie odpowiednia metoda i akcja są ustawiane.

Heh, dobrze. Trochę się pośpieszyłem. W najprostszym przykładzie, faktycznie to wystaraczy. Z praktyki zwyczajnie wychodzi, że często jest to nie opłacalne (oszczędzasz dwie linijki kodu).