2009-10-07 51 views
1

我正在使用Lightbox Gone Wild来显示内部表单的模态对话框。我正在使用香草新视图。这就像一个冠军直到用户不输入有效的表单数据。无效的数据会导致控制器将用户直接指向新视图并显示错误消息。显然,我宁愿将错误返回给模式,但我明白用户被定向到错误的常规新视图的原因。Rails Modal表单验证

一个明显但不切实际的选择是编写自定义客户端验证。另一种方法是根据模型验证生成客户端验证逻辑。为此,我发现了两个利用validation_reflection的婴儿插件。虽然validatious-on-rails几乎是周老client_side_validation似乎被放弃。最后,使用form_remote_tag也看起来很有前景,因为它执行AJAX回发,并且似乎不会执行错误刷新。

总之,我正在寻找最常用的方式来验证用户输入到在模式对话框中呈现给用户的表单,并在错误时将它们返回到具有错误的对话框。

代码来打开模态

<% link_to 'New Project...', new_project_path, :class => 'lbOn' %> 

新视角

<% form_for(@project) do |f| %> 
    <%= f.error_messages %> 

    <p> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </p> 
    <p> 
    <%= f.label :description %><br /> 
    <%= f.text_field :description %> 
    </p> 
    <p> 
    <%= f.submit 'Create' %><br /> 
    <a href="#" class="lbAction" rel="deactivate">Cancel</a> 
    </p> 
<% end %> 

回答

2

我在想你可能会返回一个RJS模板,它会更新你的Modal中的预设div以用于错误(而不是重定向到新的)。

3

我是背后的人validatious-on-rails。我的观点是你在很多情况下需要客户端和AJAX。以前尝试以DRY的方式解决客户端验证,那里有很多Rails验证选项丢失了,但我试图通过客户端验证来尽可能地解决Rails选项 - 仅限于遇到了一些问题:如果/除非另有一些其他原因很明显,否则在大多数IRL案例中都是不可能的。对于这些情况以及你必须查询数据库的情况(比如检查用户标识的唯一性),你需要AJAX。在你的情况下,你只需要用你想要验证的输入做一个AJAX请求,然后返回一个RJS/JS模板(将作为JSON体返回),用于定期更新表单内容/消息/等等。