2012-07-27 66 views
5

有渲染ERB頁面js.erb這樣一個辦法:在軌遠程=>真:如何使用new.js.erb中的局部變量f渲染RAILS部分?

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

我們有部分_customer_quote_record這樣的:

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

局部在html.erb呈現爲此,與通過局部變量助洗劑:

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

試過代碼如下:

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

,誤差"ActionView::Template::Error (undefined local variable or method F」 ......「`

有沒有一種方法來呈現以上部分中js.erb?

回答

10

嘗試以下操作:

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

當然,這是假設您隨時隨地撥打這個電話f定義。如果是不同的,只是改變:locals => {:f => f}:locals => {:f => "YOUR_VARIALBE"}

+5

同樣的錯誤。 f是僅存在於視圖中的表單構建器。我的問題是如何將表單生成器傳遞給js.erb中的部分內容。 – user938363 2012-07-27 19:00:55

+0

啊,我現在明白了。不完全確定。你可以使用這裏提供的答案,http://stackoverflow.com/questions/371147/rails-ajax-my-partial-needs-a-formbuilder-instance,並且只是在部分內部使用'fields_for'而不是傳遞它? – Naty722 2012-07-27 19:20:35

+0

嘗試了類似的解決方案(關於傳遞對象而不是表單構建器的另一個類似帖子)。它確實有部分工作。但是,關聯丟失,導致在保存父對象時失敗。出現錯誤:子對象不能爲空。不知道是什麼導致了關聯性的喪失。 – user938363 2012-07-27 20:31:20

1

看看這個,我發現了一個解決方案:

在js.rjs文件,我repdroduce了的form_for和fields_for幫手,並保存fields_for構造函數變量@builder一個實例,然後我將它傳遞給所述部分(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

另一種方式來做到這一點:

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

+0

這實在是一個評論,而不是一個答案。有了更多的代表,[你將能夠發表評論](// stackoverflow.com/privileges/comment)。 – manetsus 2016-08-20 23:58:43

+0

你爲什麼認爲這不是一個答案?它顯示了另一種做user938363想要的方式。 我需要改變什麼才能讓它更像你的一個讚歌? – MatayoshiMariano 2016-08-25 14:03:54