我试图在我的rails网站的索引上创建一个“用户”链接,以便它显示注册用户(User.all),但是我想要将其显示在网站的正确部分,作为部分,在没有从一开始就加载整个页面。
我知道这是可能的旧的原型和远程=>真正
但是使用Rails 3.1和jQuery(和资产)我不知道该怎么做。
任何人都可以帮助或告诉我教程的方式吗?
解决方法
这实际上很简单,因为它是新的,只是感觉很大。基本上,随着新的不引人注目的JavaScript支持,rails ujs脚本公开了一组可以绑定javascript函数的事件,它们是:
> ajax:beforeSend – 发送之前发送
> ajax:成功 – 发送后发送,包含响应
> ajax:成功事件结束后完成
> ajax:当出现错误时发生错误
所有你需要做的就是编写一个函数(你在$ document.ready中包装),这个函数反过来会将一些匿名函数绑定到这些事件中,或者只是你感兴趣的事件。
例如,假设您有一个div,您要将响应数据放入一个id为“response_data”,并且您的链接的ID为“ajax_trigger”。这样的事情
<%= link_to "My Link",some_model_path(@model_instance),:remote => true,:html => {:id => "ajax_trigger"} %> <div id="response_data"> </div>
所有你需要做的是提供一个类似下面的功能,以便将服务器的响应放入div:
$(document).ready( function(){ $("a#ajax_trigger").bind("ajax:success",function(evt,data,status,xhr){ //this assumes the action returns an HTML snippet $("div#response_data").html(data); }).bind("ajax:error",xhr){ //do something with the error here $("div#errors p").text(data); }); });
真的,您正在使用的所有JavaScript都是在从服务器返回时处理响应。您不需要特别处理启动XHR请求,您也可以将该方法安全地存储在作为静态资源的.js文件中。如果您使用的是Rails 3.1,则应将其放在与控制器对应的适当命名的javascript文件中。在控制器中,您需要确保指定:layout =>在respond_with()方法中为false,控制器只返回其呈现的部分或模板,而不是完整的页面。此设置还适用于返回JavaScript以由客户端执行的操作以及JSON,具体取决于您在请求中指定的数据类型。
我发现这个博客文章是非常有帮助的:
http://www.alfajango.com/blog/rails-3-remote-links-and-forms/