0

我想在注册期间首先进行表单验证我想检查user_name之前是否使用过并且我想从头开始制作它而不使用宝石以了解它是如何工作的,所以我找到了这个问题,我我试图实现一个我在那里找到的答案 1-我使用 js2coffee 将 js 代码更改为 coffe以便在 users.js.coffee 中使用它而不是在 application.js 中

jQuery ->
  $("[data-validate]").blur ->
    $this = $(this)
    $.get($this.data("validate"),
      user: $this.val()
    ).success(->
      $this.removeClass "field_with_errors"
    ).error ->
      $this.addClass "field_with_errors"

2-我的路线文件中有这个

  devise_for :users, :controllers => { :registrations => "users" }
  resources :users, only: [:index, :new, :create, :show, :destroy, :edit, :update] do |user|
    collection do
      get 'checkname'
    end
  end

3- 在我的 users_controller 里面

def checkname
    if User.where('user_name = ?', params[:user]).count == 0
      render :nothing => true, :status => 200
    else
      render :nothing => true, :status => 409
    end
    return
  end

4- 我的表格 new.html.erb

<%= simple_form_for(@user) do |f| %>
    <%= f.error_notification %>

    <div class="inputs">
      <%= f.input :user_name, input_html: { data-validate="/users/checkname" }%>
    </div>

    <div class="actions">
      <%= f.button :submit, "Accept", :class => "btn btn-inverse" %>
    </div>
    <% end %>

我得到的错误(因为如果我删除input_html: { data-validate="/users/checkname" }了错误,我不知道如何使 data-validate 属性起作用,但我无法进行用户名验证)

SyntaxError at /users/new
syntax error, unexpected '}', expecting tASSOC

对此有任何帮助,因为我进行了很多搜索,但找不到更新的示例

4

2 回答 2

2

我真的看不出有任何理由不使用唯一性验证器

class User < ActiveRecord::Base
  validates :user_name, uniqueness: true
end

另外,不要使用 js2coffee - 你会得到糟糕的代码,而且你永远不会学习如何使用 js 或 coffeescript。

关于“您不能在一天的同一时间发布两个事件”-您可以使用内置验证来做到这一点:

validates :event, :uniqueness => {:scope => [:day]}
于 2013-10-18T13:29:39.753 回答
1

这应该工作

<div class="inputs">
   <%= f.input :user_name, input_html: { "data-validate" => "/users/checkname" }%>
 </div>

data-validate 应该是字符串或符号。符号在您的情况下不起作用,因为它带有连字符

于 2013-10-18T13:18:35.350 回答