2013-01-03 43 views
0

我需要一些帮助来验证我的Rails。如果其他字段具有特定值,我需要验证一个字段是否已填写。代码如下。Rails通过复选框验证

如果许可证已选择扩展,则需要填写扩展许可证类型。当我填写表单并选择扩展并且不检查任何扩展许可证类型时,它将无法正常工作,它会验证正确,我会得到没有错误信息。

许可证字段是一个下拉列表,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"]] %> 
+0

我注意到它传回了'0'为extended_license_type,所以我的验证正在工作。我需要使验证检查它不是'0' – covard

回答

1

将只会验证正在强制很好。它传递'0'为extended_license_type并验证,因为我只是检查该字段的存在。

0

尝试

validates_presence_of :extended_license_type, :if => :license_extended? 
0

我猜private许可证前添加colon

private 
    def license_extended? 
     :license == 'extended' 
    end 

validates_presence_of :extended_license_type, :if => :license_extended? 

(或)

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