8

レールで :remote => true を使用して、次のように js.erb で erb ページをレンダリングする方法があります。

$('#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 methodf'..."`

上記のパーシャルを js.erb でレンダリングする方法はありますか?

4

3 に答える 3

15

次のことを試してください。

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

もちろん、これはf、この呼び出しを行う場所で定義されていることを前提としています。異なる場合は、に変更:locals => {:f => f}するだけです:locals => {:f => "YOUR_VARIALBE"}

于 2012-07-27T18:38:26.620 に答える
2

これを見て、私は解決策を見つけました:

js.rjs ファイルで、form_for および fields_for ヘルパーを再作成し、fields_for コンストラクターをインスタンス変数に保存し@builderてから、パーシャル ( locals: {f: @builder...)に渡します。

js.rjs:

<%
  @expense=Expense.new
  new_expense_detail=@expense.expense_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_<%=@child_index%>").html("<%= escape_javascript(render(partial: 'select_costcenter', locals: {f: @builder,child_index: @child_index}))%>");
于 2014-03-10T12:47:14.863 に答える