client
client_side_validation gem - 布尔值作为复选框(client_side_validation gem - boolean as check boxes)我正在使用client_side_validation gem在我的应用程序中执行js验证。 我正在使用simple_form版本。
我的权限模型中有一个布尔属性,经过验证
class Permission < ActiveRecord::Base validates :local, :regional, :national, :inclusion => {:in => [true, false]} end但是在视图中,它们呈现为复选框,其值为1或0,因此它们永远不会标记为已验证。
有任何想法吗?
I'm using the client_side_validation gem to do js validations in my app. I'm using the simple_form version.
I've got a boolean attributes in my permission model which are validated
class Permission < ActiveRecord::Base validates :local, :regional, :national, :inclusion => {:in => [true, false]} endHowever in the view they are rendered as checkboxes, which have value of either 1 or 0, so they are never marked as validated.
Any ideas?
最满意答案您必须为复选框设置:validate => false 。 例如
<%= simple_form_for @permission, :validate => true do |f| %> <%= f.input :name, :label => 'Name' %> <%= f.label :local %> <%= f.check_box :local, :validate => false %> <%= f.label :national %> <%= f.check_box :regional, :validate => false %> <%= f.label :regional %> <%= f.check_box :national, :validate => false %> <%= f.button :submit %><% end %>由于复选框的定义是true或false,因此客户端验证并不是必需的。 通过服务器端验证,您仍然可以防止有人试图恶意提交非布尔值。
You will have to set :validate => false for checkboxes. E.g.
<%= simple_form_for @permission, :validate => true do |f| %> <%= f.input :name, :label => 'Name' %> <%= f.label :local %> <%= f.check_box :local, :validate => false %> <%= f.label :national %> <%= f.check_box :regional, :validate => false %> <%= f.label :regional %> <%= f.check_box :national, :validate => false %> <%= f.button :submit %><% end %>As checkboxes are by definition true or false, client side validation is not really necessary. With your server-side validation, you are still protected from someone trying to maliciously submit non-boolean values.