通过部分和Ajax调用传递变量

时间:2015-01-31 11:16:13

标签: ruby-on-rails ruby ajax ruby-on-rails-4

我希望了解如何使用.js.erb file通过使用Rails的Ajax调用传递变量。

目前我在我的观点中宣布这一点

<% document = @documents.select { |d| d.skill_id == s.id } %> 

<div class="doc_upload">
  <%= render partial: 'shared/documents/document_form', locals: { document: document } %>
</div>

共享/文档/ document_form

<% if document %>
  <% document.each do |doc| %>
    <%= doc %>
  <% end %>
  <%= render template: '/documents/new' %>
<% else %>
  <%= render template: '/documents/new' %>
<% end %>

因此,当我创建一个新文档时,我正在使用Ajax调用来处理它

create.js.erb

$('.doc_upload').html("<%= j render(partial: 'shared/documents/document_form', locals: { document: document }) %>")

但是我得到了undefined local variable or method文件``

我有无法再访问document吗?

2 个答案:

答案 0 :(得分:1)

这是因为document变量未定义。您需要传入控制器中找到的@document或初始化js.erb文件中的document

编辑: 检查你的js.erb,在local哈希中,你可以清楚地看到你传递document变量,但它没有在任何地方定义。

答案 1 :(得分:0)

在create.js.erb中更改

$('.doc_upload').html("<%= j render(partial: 'shared/documents/document_form', locals: { document: document }) %>")

$('.doc_upload').html("<%= j render(partial: 'shared/documents/document_form', locals: { document: @document }) %>") 

&安培;它会起作用。