2012-07-27 9 views
5

C'è un modo per rendere una pagina erb in js.erb simili con: telecomando => true in apparati:Come rendere un partial RAILS con la variabile locale f in new.js.erb?

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

Abbiamo un _customer_quote_record parziale simile:

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

Il parziale è reso in html.erb come questo, con il passare builder variabile locale:

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

provato il codice qui sotto

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

E l'errore è "ActionView::Template::Error (undefined local variable or method f' ... "`

C'è un modo per rendere il parziale sopra js.erb?

risposta

10

provare quanto segue:

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

Questo ovviamente presuppone che f è definito ovunque si effettua la chiamata. Se è diverso, basta cambiare :locals => {:f => f} per :locals => {:f => "YOUR_VARIALBE"}

+5

stesso errore. f è il generatore di forme che vive solo nella vista. La mia domanda è come passare il generatore di moduli nel partial in js.erb. – user938363

+0

Ah, ora capisco. Non del tutto sicuro. Potresti usare la risposta fornita qui, http://stackoverflow.com/questions/371147/rails-ajax-my-partial-needs-a-formbuilder-instance, e usare semplicemente 'fields_for' all'interno del partial piuttosto che passarlo? – Naty722

+0

Provato una soluzione simile (un altro post simile sull'oggetto pass invece del form builder). Ha funzionato parzialmente. Tuttavia, l'associazione perse, causando l'errore durante il salvataggio dell'oggetto padre. Errore: l'oggetto figlio non può essere vuoto. Non sono sicuro che cosa causi la perdita dell'associazione. – user938363

1

Guardate questa, ho trovato una soluzione:

nel file di js.rjs, ho repdroduce il form_for e aiutante fields_for e salvare il costruttore fields_for in un'istanza variabile @builder , e poi lo passo ai parziali (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

Un altro modo per farlo:

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

+0

Questo è davvero un commento, non una risposta. Con un po 'più di ripetizione, [sarai in grado di postare commenti] (// stackoverflow.com/privileges/comment). – manetsus

+0

Perché pensi che non sia una risposta? Mostra un altro modo di fare ciò che user938363 vuole. Cosa devo cambiare per renderlo più simile a un anser per te? – MatayoshiMariano

Problemi correlati