Rails使用复选框进行验证

时间:2013-01-03 16:53:46

标签: ruby-on-rails-3 validation

我的Rails验证需要一些帮助。如果另一个字段具有特定值,我需要验证是否填写了一个字段。代码如下。

如果已选择扩展许可证,则需要填写扩展许可证类型。它不起作用,当我填写表单并选择扩展并且不检查extended_license_type的任何内容时,它验证正常,我得不到错误信息。

许可证字段是下拉列表,extended_license_type是一组复选框。

  validates :license, presence: true
  validates :extended_license_type, presence: true, :if => :license_extended?

private
    def license_extended?
      license == 'extended'
    end

以下是表单的复选框。也许我的问题在于它们而不是验证。任何帮助将不胜感激。

    <%= f.check_box :extended_license_type, {}, "ur" %>
    <%= f.label :extended_license_type, "Unlimited Reproduction" %>
    <%= f.check_box :extended_license_type, {}, "ms" %>
    <%= f.label :extended_license_type, "Multi-User/Seat" %>
    <%= f.check_box :extended_license_type, {}, "pr" %>
    <%= f.label :extended_license_type, "Product for Resale" %>
    <%= f.check_box :extended_license_type, {}, "ers" %>
    <%= f.label :extended_license_type, "Product for Electronic Resale" %>
    <%= f.check_box :extended_license_type, {}, "ed" %>
    <%= f.label :extended_license_type, "Product for Electronic Distribution" %>
    <%= f.check_box :extended_license_type, {}, "ep" %>
    <%= f.label :extended_license_type, "Extended Legal Protection" %>

这是我的许可证字段下拉列表。

<%= f.select :license, [["Standard", "standard"], ["Extended", "extended"]] %>

3 个答案:

答案 0 :(得分:1)

验证工作正常。它为extended_license_type传递'0'并且验证,因为我只是检查该字段的存在。

答案 1 :(得分:0)

尝试

validates_presence_of :extended_license_type, :if => :license_extended?

答案 2 :(得分:0)

我想在colon

中的许可之前添加private
private
    def license_extended?
      :license == 'extended'
    end

validates_presence_of :extended_license_type, :if => :license_extended?

(或)

validates :extended_license_type, :presence => true, :if => :license?