根据验证错误从AJAX更新不同的div

时间:2008-11-19 10:08:24

标签: ruby-on-rails ajax prototype

我有一个我通过AJAX提交的表单(使用原型和内置rails'form_remote_tag'帮助器)。
我想要的是更新一个div(一个状态区域),如果有表单验证错误但是一个不同的div(表单所在的div),如果提交成功通过。

我的代码看起来像这样:

<div id="recipe-status"><!-- I want form validation errors to go here --></div>
<div id="recipe">
    <%= form_remote_tag(:update => "recipe-status",
       :before => "Element.show('wait-indicator')",
       :success => "Element.hide('wait-indicator')",
       :complete => visual_effect(:appear, "recipe-status"),
       :url => { :action => 'import', :id => @recipe.id },
        :failure => "alert('Unable to import recipes at present')") %>
    <-- Form goes here, I want this to be replaced if the submit succeeds -->
</div>

我能想到这样做的唯一方法是,如果存在验证错误,则返回HTTP错误状态,但这似乎有点像黑客攻击。 是否有一种更干净的方式来做这件事?

2 个答案:

答案 0 :(得分:1)

我会查看最新的Railscasts on jQuery以及older episode on RJS templates。这些应该让你在AJAX和你的Rails应用程序中运行良好,并使所有功能正常,干净,没有任何黑客攻击。

看了你的代码,我建议使用jQuery(参见上面的剧集),你将从你的表单making it a lot less obtrusive中提取所有的javascript(这是一件非常好的事情)。

看起来你已经掌握了这些技术,所以你很快就会开始用jQuery编写不引人注目的Javascript,很可能你会用一个更清洁的应用来结束一个更快乐的人。 :)

祝你好运!

答案 1 :(得分:1)

我建议,如另一个答案所述,你会考虑使用jQuery。但是,这肯定需要一些提升,所以坚持使用Rails默认值,这样你就可以更快地向前推进......

您想要了解的是内联RJS。您可以在控制器中执行AJAX更新,而不是在form_remote_tag调用中执行所有操作。这样,您可以管理是否存在验证错误的逻辑,并根据具体情况执行一个或另一个AJAX更新(以任何div为单位)。

首先看this post by Jamis Buck