【发布时间】:2014-08-06 23:11:38
【问题描述】:
您好,我有一个 rails 4 应用程序,其中有以下代码:
<%= form_for @store, do |f| %>
<%= f.fields_for :products do |builder| %>
<%= render "product_fields", f: builder %>
<% end %>
<%= link_to_add_fields "Add Product", f, :products %>
<% end %>
然后我有 _product_fields.html.erb 喜欢:
<%= f.select :type_of, %w[Blah blah], {}, class: "select_it" %>
<div class='product-view'>
<%= render "stores/product_form/bookshelf", f:f %>
</div>
我的 javascript(coffeescript) 看起来像:
$('form').on 'change', '.select_it', (e) ->
value = $(this).val()
params = 'type=' + value
$.ajax({
url: "/switch_product",
data: params
})
然后我的控制器看起来像:
def switch_product
@type = params[:type]
respond_to do |format|
format.js
end
end
然后我有一个 switch_product.js.erb 文件,如下所示:
$(this).(".product-view").html("<%= j render "stores/product_form/#{@type.downcase}", f:f %> ");
但是在 switch_product.js.erb 上我得到了错误:
undefined local variable or method `f'
如何将局部变量从页面传递到 js.erb 文件?
编辑:
这是我尝试使用 switch_product.js.erb 呈现的内容(但这只是一个,我也有 _books.html.erb 和 _bookshelf.html.erb:
<%= f.hidden_field :the_type_is, value: "Birdhouse" %>
<%= f.fields_for :product_fields, f.object.product_fields.build do |builder| %>
<%= builder.text_area :price %>
<% end %>
【问题讨论】:
-
试试这个
$(this).(".product-view").html("<%= j render "stores/product_form/#{@type.downcase}", :locals => { :f => f } %>"); -
@Pavan,好的,我试过了,但还是出现同样的错误?
-
您在哪一行得到错误?
-
@Pavan,我已经启动了 Chrome 开发人员工具,并且在 switch_product.js.erb 的网络页面上,整个文件(只是我发布的行)被错误输出了
-
我猜这个
".product-view"应该是"#product-view"。
标签: javascript jquery ruby-on-rails ruby coffeescript