我有一个index.htm.erb文件,里面有一个渲染模板文件。
<div id="product"> <%= render :template => "shop/products" %> </div>
在我的控制器中
def index
@products = Product.paginate :page => params[:page], :per_page => 6
end
我的index文件底部有一个js文件,里面有一个脚本来获取will_paginate url。
$(window).scroll(function(){
if( $(this).scrollTop() > ( ( $(document).height() - $(this).height() ) - 50 ) ){
var link = $('.pagination .next_page').attr('href');
$.getScript( link );
}
});
此getScript调用与index.html.erb同名的js文件。所以它的index.js.erb。 在js.erb文件中我有一个
console.log("products = ", @products);
尝试检索实例变量时出错。 500内部服务器错误 我无法访问@products变量。 要访问此变量,我需要做什么。
更新:
我正在使用http://railscasts.com/episodes/114-endless-page-revised?autoplay=true中的相同教程 唯一的区别是我在index.html.erb中使用了一个模板 所以我仍然不明白在教程中他们如何访问实例变量,但我没有
答案 0 :(得分:1)
无视答案
我不是一个很大的RoR家伙,所以我可能会对这种情况有所了解,但我仍然想尝试帮助你。这是我的猜测:
这不是真正的RoR相关,而是一般来说是前端问题的后端。 JavaScript完全在浏览器中运行,而Rails只在服务器上运行。因此,JS不知道您在Ruby environmt中定义的所有变量。如果你想在JS中访问变量,你必须以某种方式将它写入页面。
简单地说,你需要做一些事情:
<script>
var productName = "<%= @product.name %>";
</script>
因此Rails将解析html并用实际名称替换<%= @product.name %>
部分。所以浏览器检索一个看起来像这样的HTML
<script>
var productName = "Ice Cream";
</script>
这是一种非常简单的方法,可以将变量从后端传递到前端。
答案 1 :(得分:0)
尝试明确地将@products
变量传递给您的模板:
<%= render :template => "shop/products", :locals => {:my_products => @products} %>
然后,您可以在my_products
模板中使用变量shop/products
,无论您当前使用的是@products
。