小编Chr*_*ngs的帖子

使用Rails 3的Ajax表单 - 最佳实践?

什么被认为是Ajax表单的Rails方式

直到今天我才认为我使用Rails表单+ jQuery UJS的方式是正确的方法,但是jQuery 1.7的升级'打破'到目前为止我的方式.

这该怎么做?

我想在表单中使用Ajax.ajax响应应该再次呈现表单(例如,发生错误时)或重定向到成功页面.(它应该可以做更多,比如显示模态,但我想保持这个例子简单).

1.使用EJS和$('#formid').html(...)

这就是我迄今为止所做的.我的ajax响应是一个ejs模板,它返回了javascript代码以再次呈现表单(有错误)或者取决于是否是错误将用户重定向到成功页面:

<% unless @success_submit %>
$('#form_wrapper').html('<%= escape_javacsript( render :partial => 'form' ) %>'); 
<% else %>
document.location = '/success_thank_you';
<% endif %>
Run Code Online (Sandbox Code Playgroud)

现在假设表单包含一个错误消息div like

<div class="error_message">BlaBla</div>
Run Code Online (Sandbox Code Playgroud)

为了添加一个很好的效果,我在ajax完成时绑定了一个通用的jQuery.live事件,突出显示了错误.

$('form').live('ajax:complete', function() {
   // do stuff like highlighting all error messages in that form
}); 
Run Code Online (Sandbox Code Playgroud)

这不再适用于jQuery1.7 + jquery-ujs(可能有很好的理由).所以我猜我做的方式不对.

2.使用上述方式但重复自己

而不是绑定ajax:complete事件我可以在EJS中执行"错误突出显示内容"

$('#form_wrapper').html('<%= escape_javascript( render :partial => 'form' ) %>');
$('#form_wrapper form .error_message').fadeIn();
Run Code Online (Sandbox Code Playgroud)

但这意味着我将不得不重复几乎每一个呈现形式的EJS的第二行.当然,我想保持干爽.

3. Ajax响应呈现纯html,ajax:完成事件处理显示

一个完全不同的解决方案是ajax响应只是渲染纯html和我的自定义ajax:完整的处理程序将负责显示表单.处理程序看起来像

$('form').live('ajax:success', function(ev, data, status, xhr) {
  $(this).html(data);
  // and e.g. …
Run Code Online (Sandbox Code Playgroud)

forms ajax ruby-on-rails unobtrusive-javascript

22
推荐指数
1
解决办法
8247
查看次数

从Rails 3.0升级到Rails 3.2(Ruby 1.9.3 + Passenger)后出现大量内存泄漏/膨胀

上周我们将一个运行在Rails 3.0.1上的小项目升级到Rails 3.2.2.

升级后不久,我们偶尔认识到,每天2-3次,我们看到了一个巨大的Phusion Passenger进程(1-5 GB).

我们正在运行Phusion Passenger 3.0.11和Ruby 1.9.3-p0.我们已经尝试过不同的Ruby版本(1.9.2-p290和1.9.3-p125)而没有成功.

之后,我们尝试使用Oink跟踪内存使用情况.不幸的是,Oink没有显示内存膨胀的原因 - 大型进程似乎不再写入日志文件了.

当我们降级回Rails 3.0.1时,问题就消失了.有没有人有类似的问题?我们确实检查了代码是否存在可能的内存泄漏,例如ActiveRecord实例太多,但没有发现任何内存泄漏.

你觉得尝试Unicorn而不是Passenger是值得的吗?或者我们可能遇到同样的问题?

有关如何跟踪内存泄漏的任何建议都是受欢迎的.我们已经设置了newrelic,但它没有显示有关内存泄漏的详细信息.

ruby memory-leaks passenger ruby-on-rails-3.2

8
推荐指数
1
解决办法
1243
查看次数