2012-07-27 18 views
5

Jest na to sposób, aby uczynić stronę erb w js.erb tak z remote => true w szynach:Jak renderować częściowe RAILS z lokalną zmienną f w new.js.erb?

$('#invoice_against_lease').html('$("<%= j render(:file => 'invoice/new.html.erb') %>")'); 

Mamy częściowy _customer_quote_record takiego:

<%= f.input :quote_id, :label => 'Quote#:', :collection => quotes_for_invoice(@customer), :include_blank => true %> 
    <%= f.hidden_field :_destroy %> 

Częściowa jest renderowany w html.erb jak ten, z przechodzącej zmiennej lokalnej producentów:

<%= f.simple_fields_for :invoice_items do |builder| %> 
    <%= render 'customer_quote_record', :f => builder %> 
<% end %> 

Próbowaliśmy kod poniżej:

$('#invoice_against_lease').html('$("<%= j render(:file => 'customer_lease_record', :f => f) %>")'); 

a błąd jest "ActionView::Template::Error (undefined local variable or method f”..." `

Czy istnieje sposób, aby uczynić częściowe powyżej w js.erb?

Odpowiedz

10

Spróbuj wykonać następujące czynności:

$('#invoice_against_lease').html('$("<%= j render(:partial => 'customer_lease_record', :locals => {:f => f}) %>")'); 

To oczywiście zakłada, że ​​f definiuje gdziekolwiek dokonać tego połączenia. Jeśli jest inaczej, wystarczy zmienić :locals => {:f => f} do :locals => {:f => "YOUR_VARIALBE"}

+5

Ten sam błąd. f jest budowniczym formularzy, który żyje tylko w widoku. Moje pytanie brzmi: jak przekazać konstruktora formularza do częściowego w js.erb. – user938363

+0

Ah, teraz widzę. Nie do końca pewne. Czy możesz skorzystać z odpowiedzi podanej tutaj, http://stackoverflow.com/questions/371147/rails-ajax-my-partial-needs-a-formbuilder-instance, i po prostu użyć 'fields_for' w części zamiast ją przekazać? – Naty722

+0

Wypróbowałem podobne rozwiązanie (inny podobny wpis dotyczący obiektu przekazywania zamiast konstruktora formularzy). To działało częściowo. Jednak utracono powiązanie, które spowodowało niepowodzenie podczas zapisywania obiektu nadrzędnego. Mam błąd: obiekt podrzędny nie może być pusty. Nie wiem, co powoduje utratę powiązania. – user938363

1

Spójrz na to, znalazłem rozwiązanie:

w js.rjs pliku, ja repdroduce form_for i fields_for pomocnika i zapisać fields_for konstruktora w instancji zmiennej @builder , a następnie przekazać je do częściowego (locals: {f: @builder...)

js.rjs:

<% 
    @expense=Expense.new 
    [email protected]_details.build 
    form_for(@expense) do |f| 
    f.fields_for(:expense_details,new_expense_detail,:child_index=>@child_index) do |builder| 
     @builder=builder # <<--- New line compared js.rjs 
    end 
    end 
%> 

$("#cost_center_group_<%[email protected]_index%>").html("<%= escape_javascript(render(partial: 'select_costcenter', locals: {f: @builder,child_index: @child_index}))%>"); 
2

Innym sposobem postępowania:

<%=j render "invoice/new", f: f %>

+0

To jest naprawdę komentarz, a nie odpowiedź. Przy odrobinie więcej powtórzeń [będziesz mógł dodawać komentarze] (// stackoverflow.com/privileges/comment). – manetsus

+0

Dlaczego uważasz, że to nie jest odpowiedź? Pokazuje inny sposób robienia tego, czego chce użytkownik938363. Co muszę zmienić, aby był bardziej podobny do anwser? – MatayoshiMariano

Powiązane problemy