我正在使用Lightbox Gone Wild来显示内部表单的模式对话框。我正在使用香草新视图。在用户不输入有效的表单数据之前,这就像一个冠军。无效数据会导致控制器直接使用错误消息将用户定向到“新建”视图。显然,我更倾向于将错误返回到模态,但我理解用户被定向到有错误的常规新视图的原因。
一个明显但不切实际的选择是编写自定义客户端验证。另一种方法是基于模型验证生成客户端验证逻辑。为此,我找到了两个利用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 %>
答案 0 :(得分:3)
我是validatious-on-rails背后的家伙。我对此的看法是,在许多情况下,您需要客户端和AJAX。之前尝试以干燥的方式解决客户端验证,其中有许多丢失的Rails验证选项,但我试图解决这个问题,因为客户端验证尽可能地尊重Rails选项 - 仅遇到了一些问题:如果/:除非和其他一些原因相当明显,在大多数IRL案例中都不可能。对于这些情况,以及你必须查询数据库的情况,因为(例如检查用户id的统一性)你需要AJAX。在您的情况下,您只需要对要验证的输入执行AJAX请求,并返回一个RJS / JS模板(将作为JSON正文返回),使用常规dom操作更新表单内容/消息/等。 / p>
答案 1 :(得分:2)
我想你可以返回一个RJS模板,该模板会更新模态中的预设div以获取错误(而不是重定向到新的)。
答案 2 :(得分:0)
传统的方法是使用javascript进行客户端验证,以及服务器端验证。对于您的情况,服务器端验证应该使用AJAX肯定
完成对于javascript验证,您可以尝试:
http://docs.jquery.com/Plugins/Validation
对于服务器端验证,您可以尝试:
http://guides.rubyonrails.org/activerecord_validations_callbacks.html(验证)
答案 3 :(得分:0)