使用客户端验证验证另一个字段中是否存在值

时间:2015-07-06 01:52:50

标签: javascript ruby-on-rails forms validation client-side-validation

我正在使用一个非常有用的gem ClientSideValidations,它除了条件验证之外的所有内容都很有效,其中条件是另一个字段中存在值。

我有一个复选框字段(:has_dog),如果选中,则会在文本字段(:dog_name)中生成结果进行验证。现在这一切都很好,并且正如服务器端验证所预期的那样,但在执行客户端时它不会验证。

条件验证在客户端为其他字段工作,其中我说硬编码为真,或者在服务器端执行其他操作,但是如果结果需要来自同一表单中的字段,则不行。

class PetCare < ActiveRecord::Base
    validates :dog_name, presence: true, if: :has_dog?
end

表格

<%= form_for @pet_care, validate: true do |f| %>

   <%= f.label :has_dog %> 
   <%= f.check_box :has_dog %>

   <br />       

   <%= f.label :dog_name %>    
   <%= f.text_field :dog_name, validate: true  %>

<% end %>

所以客户端&#34; dog_name&#34;即使&#34; has_dog&#34;也没有得到验证。是真的。 (虽然它在服务器端工作)。我尝试过各种名称,表单类型等组合。它只是没有看到&#34; has_dog&#34;值。我接近只是为此编写一个自定义验证器,但似乎这对于一个非常简单的事情来说是过分的。有没有其他人有这个,有任何解决方案吗?

1 个答案:

答案 0 :(得分:2)

我希望这会有所帮助。 当我更新用户模型时,我没有以这种方式发送密码。

#app/models/user.rb

class User < ActiveRecord::Base
  attr_accessor :updating_password
  def should_validate_password?
    updating_password || new_record?
  end
end

现在控制器上有

#app/controllers/users/users_controller.rb
class Users::UsersController < UserController
  before_filter :check_password_submitted, :only => :update
  private
  def check_password_submitted
    if params[:user][:password].blank?
      params[:user].delete("password")
      params[:user].delete("password_confirmation")
      user.updating_password = false
    else
      user.updating_password = true
    end
  end
end

我知道前端没有发生这种情况,但它可能会给你一些暗示。

Happy Codding