我需要更新我的 index.html.erb 文件(用于产品),但无需重新加载整个页面。例如,我有一个名为“Sold”的列,它的值为“YES”或“NO”。我有一个更新这些值的后台 rake 任务,但我希望我的索引文件更新为,向用户显示哪些产品已售出。我不知道如何从 rake 任务中调用这种更改。请问有什么帮助吗?我看到的大多数 ajax 和 rails 3“教程”主要处理用户到服务器的交互,而不是服务器到用户的交互。
问问题
114 次
2 回答
0
您可能会在您的产品索引页面上添加 javascript 代码来 ping 您的服务器以定期(每 n 秒)获取产品的状态。如果您的页面上有很多产品,这可能是一个昂贵的电话。所以我会在你的身上有这样的东西index.html.erb
<script type="text/javascript">
$('document').ready(function() {
$.ajax({
method: 'get',
url : 'products/ping',
dataType : 'json',
success: function (json) {
// iterate through json objects and update their respective sold status
// on page.
}
});
</script>
然后将 ping 路由添加到您的产品控制器,该控制器基本上以 JSON 对象响应,其中包含您要在视图上更新的产品的状态和 id。因此,当 Ajax 请求完成并获得 JSON 对象时,迭代产品并根据其 id 更新该产品的状态。因此,您对产品控制器的操作将如下所示:
# app/controllers/products_controller.rb
def ping
respond_to do |format|
products_sold_statuses = {}
format.json do
Products.all.each do |product|
# add product sold status and probably id to products_sold_statuses
end
render :json => product_sold_statuses, :layout => false
end
end
end
该代码未经测试,因此只需将其用作构建解决方案的基础。它还假设您使用的是 JQuery。
于 2012-08-28T12:15:57.090 回答