我想在' index'上使用ajax创建动作页。我在SO上发现了一些类似的问题,尝试使用它,但到目前为止我没有帮助。 HTML工作正常,只有JS才是问题。
def items
@item = Item.new
@items = current_user.items
find_items
@ads = @items_ads
end
def create
@items = current_user.items
find_items
#@items_ads via find_items method
@ads = @items_ads
@item = current_user.items.build item_params
current_user.save
respond_to do |format|
format.html { redirect_to :back }
format.js
end
end
<div id="items1">
<div class="row">
<div class="col-md-3">
<h3>Wall of user <%= current_user.name %></h3>
<div>
<%= render 'item_form', item: @item %>
</div>
Currently you are looking for these items:
<div>
<%= render 'items_list', items: @items %>
</div>
</div>
<div>
<%= render 'ads/ads_list', ads: @ads %>
</div>
</div>
</div>
<%= form_for(item, url: wall_items_path, remote: true) do |f| %>
...
首先我有错误:
ActionView::Template::Error (undefined local variable or method `items' for #<#<Class:...
然后我从
更改了create.js.erb$("#items1").html("<%= render 'items_list', locals: {items: @items} %>");
$("#items1").html("<%= render 'ads_list', locals: {ads: @ads} %> ");
到
$("#items1").html("<%= render 'items_list', items: @items %>");
$("#items1").html("<%= render 'ads/ads_list', ads: @ads %>");
现在它没有向我显示任何错误,但在浏览器上尝试JS时没有明显的变化。谢谢你的帮助。
答案 0 :(得分:2)
您可以通过两种方式使用本地数据呈现部分:
快捷方式
<%= render "my_partial", local_var_1: some_var, local_var_2: another_var %>
快捷方式版本将部分名称作为第一个参数,将局部变量的哈希作为第二个参数。
长格式版
此表单只带有Hash
形式的单个参数以及所有选项。
执行以下操作会产生意外结果
<%= render "my_partial", locals: { local_var_1: some_var, local_var_2: another_var } %>
从技术上讲,您使用的是快捷版本(选项1),渲染部分名为&#34; my_partial&#34;使用一个名为locals
的局部变量。
您可以在部分内部使用local_var_1
和local_var_2
,但实际上只能获得一个名为locals
的局部变量。
escape_javascript
GOTCHA 在服务器生成的JavaScript模板(SJR)中,每当渲染包含HTML的内容时,必须记住使用escape_javascript
。
$("#my-selector").html("<%= escape_javascript render('my_partial') %>");
无论您选择如何呈现部分(即上面的选项1或选项2),您都必须记住将其包装在escape_javascript
(或其别名j
)调用中。