2012-07-27 22 views
5

Có một cách để làm cho một trang ERB trong js.erb như thế này với: từ xa => đúng trong đường ray:Cách hiển thị một phần RAILS với biến cục bộ f trong new.js.erb?

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

Chúng tôi có một _customer_quote_record một phần như thế này:

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

Các phần được kết xuất trong html.erb như thế này, với truyền builder biến cục bộ:

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

thử đoạn code dưới đây:

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

Và lỗi là "ActionView::Template::Error (undefined local variable or method f' ... "`

Có cách nào để làm cho phần trên trong js.erb?

Trả lời

10

Hãy thử như sau:

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

Điều này tất nhiên giả định rằng f được định nghĩa bất cứ nơi nào bạn thực hiện cuộc gọi này. Nếu đó là khác nhau, chỉ cần thay đổi :locals => {:f => f} để :locals => {:f => "YOUR_VARIALBE"}

+5

Lỗi tương tự. f là trình tạo biểu mẫu chỉ hiển thị trong chế độ xem. Câu hỏi của tôi là làm thế nào để vượt qua trình tạo biểu mẫu vào phần trong js.erb. – user938363

+0

Ah, tôi hiểu rồi. Không hoàn toàn chắc chắn. Bạn có thể sử dụng câu trả lời được cung cấp ở đây, http://stackoverflow.com/questions/371147/rails-ajax-my-partial-needs-a-formbuilder-instance và chỉ sử dụng 'fields_for' bên trong một phần thay vì chuyển nó? – Naty722

+0

Đã thử một giải pháp tương tự (một bài đăng tương tự khác về đối tượng vượt qua thay vì trình tạo biểu mẫu). Nó đã làm việc một phần. Tuy nhiên, hiệp hội bị mất, gây ra sự thất bại khi lưu đối tượng cha mẹ. Đã xảy ra lỗi: đối tượng con không được để trống. Không chắc chắn nguyên nhân gây ra sự mất liên kết. – user938363

1

Nhìn này, tôi tìm thấy một giải pháp:

trong tập tin js.rjs, tôi repdroduce các form_for và helper fields_for, và lưu các nhà xây dựng fields_for trong một trường hợp biến @builder , và sau đó tôi vượt qua nó vào một phần (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

Một cách khác để làm điều đó:

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

+0

Đây thực sự là một bình luận, không phải là câu trả lời. Với đại diện nhiều hơn một chút, [bạn sẽ có thể đăng nhận xét] (// stackoverflow.com/privileges/comment). – manetsus

+0

Tại sao bạn nghĩ đó không phải là câu trả lời? Nó cho thấy một cách khác để làm những gì user938363 muốn. Tôi phải thay đổi điều gì để làm cho nó giống như một người anwser cho bạn? – MatayoshiMariano

Các vấn đề liên quan