我正在使用一个非常有用的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;值。我接近只是为此编写一个自定义验证器,但似乎这对于一个非常简单的事情来说是过分的。有没有其他人有这个,有任何解决方案吗?
答案 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