首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Rails 4中正确实现Parsley.js自定义远程Validator

在Rails 4中正确实现Parsley.js自定义远程Validator
EN

Stack Overflow用户
提问于 2015-10-31 08:53:35
回答 1查看 807关注 0票数 1

我正在尝试获取数据欧芹来验证用户名是否已经存在于数据库中。

我遇到的第一个问题是如何将JSON数据作为用户类型动态地包含“value”。我是否应该使用jQuery来实现这一点?

_system_account.erb

代码语言:javascript
运行
复制
<%=
    text_field_tag("access[username]",
                   value = nil,
                   options = {:"data-parsley-remote" => "" ,
                              :"data-parsley-remote-options" => "{ 'type': 'POST', 'dataType': 'json', 'data': { ':username': 'value' }}",
                              :"data-parsley-remote-validator" => "validate-username",
                              id:"username", placeholder:  t('access.simple_username'),
                              required: "required", pattern: "[a-z0-9_-]{3,64}$",
                              :"data-parsley-trigger" => "keyup",
                              :"data-parsley-minlength"=>"3" ,
                              :"data-parsley-maxlength"=>"64"})
%>

当表单发生更改时,相关的javascript触发:

代码语言:javascript
运行
复制
<script type="text/javascript">
    $('#username').bind('input propertychange', function()
    {
        window.Parsley.addAsyncValidator('validate-username', function (xhr) {
            // console.log(this.$element);
            // jQuery Object[ input[name="q"] ]
            var response = $.parseJSON(xhr.responseText);
            alert( JSON.stringify(response) );

            // Second Problem: How do I make data-parsley identify it is an error and mark the field red or something

        }, '/application/check_username_exists');
    }); </script>

application_controller.erb

这只是检查用户名是否存在。

代码语言:javascript
运行
复制
  def check_username_exists
    username_exists = Access.exists?(username: params[:username])
    respond_to do |format|
      format.json { render json: {:"exists" => username_exists}.to_json }
      format.html
    end
  end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-01 02:07:01

数据由欧芹填充,因此删除data: { ':username': 'value' }

由于在用户端有控件,所以最简单的方法是使用响应状态:

代码语言:javascript
运行
复制
status = Access.exists?(username: params[:username]) ?  :unauthorized : :ok
render nothing: true, status: status

无效状态(就像Invalid = 401)是针对无效字段的,.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33449777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档