【问题标题】:Rails AJAX form validationRails AJAX 表单验证
【发布时间】:2015-12-02 16:05:28
【问题描述】:

当我不使用表单模型时,在 Rails 中为 AJAX 表单实现表单验证的最佳位置在哪里?我将如何实施它?

我提交的表单需要检查 IP 地址是否存在并且是否有效控制器中的方法运行之前。如果 IP 无效,我想通过flash[:danger] 消息告知用户。

views/tools/forms/_ping.html.erb

<%= form_tag ping_tool_path(1), role: "form", class: "form-inline form_ip", name: "ping-form", method: "post", remote: true do %>
    <%= text_field_tag :ip, params[:ip], class: "form-control" %>
    <%= submit_tag "Ping", name: nil, class: "btn btn-default" %>
<% end %>

views/tools/ping.js.erb

$(".output").html("<%= j (@results) %>");

controllers/tools_controller.rb

def ping
    ping_host(params[:ip])
    save_host(params[:ip])

    # AJAX
    respond_to do |format|
      format.js
    end
end

【问题讨论】:

    标签: jquery ruby-on-rails ajax


    【解决方案1】:

    这将取决于您的应用程序的可扩展性和可扩展性。

    对于更具可扩展性的解决方案,我会使用active_interaction gem,创建一个新的交互并对其进行验证。

    这里是文档https://github.com/orgsync/active_interaction

    如果您想要一个更简单的解决方案,您始终可以在控制器上创建一个私有方法来验证 ip。

    已编辑

        private
    
        require 'resolv'
    
        def valid_ip?(ip)
          case ip
          when Resolv::IPv4::Regex
            return true
          when Resolv::IPv6::Regex
            return true
          else
            return false
          end
        end
    

    灵感来自这篇文章http://spin.atomicobject.com/2013/08/28/ruby-ip-address-regex/

    编辑 2

    连接两个部分

    在您的控制器中

        def ping
            if valid_ip?(params[:ip])
              ping_host(params[:ip])
              save_host(params[:ip])
              render json: { message: "sucess" }
            else
              render json: { errors: "Invalid Ip" }, status: 422
            end
        end
    

    javascript

        <script>
          $(document).ready(function(){
            $('.form_ip').on('ajax:success',function(e, data, status, xhr){
              // success message
              alert("success");
            }).on('ajax:error',function(e, xhr, status, error){
              // errors handler
              var errors = $.parseJson(xhr.response_text).errors;
              alert(errors);
            });
          });
        </script>
    

    来源 -> http://travisjeffery.com/b/2012/04/rendering-errors-in-json-with-rails/

    如果您也想在用户提交之前进行验证,请查看 html5 输入模式属性http://www.w3schools.com/tags/att_input_pattern.asp

    【讨论】:

    • 此时,我正在寻找更简单的解决方案,例如创建私有方法来验证 IP。
    • 我已使用可用于验证您的 IP 地址的解决方案编辑了我的答案
    • 好的,所以这可以验证 IP,但是如何在通过 AJAX 提交之前将其绑定到对表单进行验证?
    • 再次编辑代码以将功能链接到您的前端
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 2011-12-25
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多