2012-07-27 23 views
5

Hay una manera de representar una página erb en js.erb como este con: retirado => cierto en rieles:¿Cómo se renderiza un RAILS parcial con la variable local f en new.js.erb?

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

Tenemos un _customer_quote_record parcial de esta manera:

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

El parcial se representa en html.erb como este, con el paso constructor variable local:

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

Probamos el código abajo:

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

Y el error es "ActionView::Template::Error (undefined local variable or method f' ... "`

¿Hay una manera de hacer que el parcial anterior en js.erb?

Respuesta

10

intente lo siguiente:

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

Por supuesto, esto supone que f se define dondequiera que tomar esta llamada. Si es diferente, simplemente cambia a :locals => {:f => f}:locals => {:f => "YOUR_VARIALBE"}

+5

Mismo error. f es el creador de formularios que solo vive en la vista. Mi pregunta es cómo pasar el generador de formularios al parcial en js.erb. – user938363

+0

Ah, ya veo. No del todo seguro. ¿Podría usar la respuesta proporcionada aquí, http://stackoverflow.com/questions/371147/rails-ajax-my-partial-needs-a-formbuilder-instance, y simplemente usar 'fields_for' dentro del parcial en lugar de pasarlo? – Naty722

+0

Intenté una solución similar (otra publicación similar sobre objeto de pase en lugar de generador de formulario). Funcionó parcialmente. Sin embargo, la asociación se perdió, lo que provocó el error al guardar el objeto principal. Obtuve un error: el objeto hijo no puede estar en blanco. No estoy seguro de qué causa la pérdida de asociación. – user938363

1

vistazo a esto, he encontrado una solución:

en el archivo js.rjs, me repdroduce la form_for y ayudante fields_for, y guardar el constructor fields_for en una instancia de variable @builder , y luego pasarlo al parciales (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

Otra manera de hacerlo:

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

+0

Esto es realmente un comentario, no una respuesta. Con un poco más de repetición, [podrá publicar comentarios] (// stackoverflow.com/privileges/comment). – manetsus

+0

¿Por qué crees que no es una respuesta? Muestra otra forma de hacer lo que quiere el usuario938363. ¿Qué tengo que cambiar para que sea más como un guiño para ti? – MatayoshiMariano

Cuestiones relacionadas