2011-11-15 37 views
1

我试图保存一个模型movie.But的形式,我有两个单选按钮,当你点击他们每个将显示额外的隐藏领域(我隐藏这些领域最初).User is suppossed只能选择一个单选按钮来点击并填写额外的给定字段(制作人或导演字段)。此模型中的所有字段为validated_presence_of。问题是当您单击一个单选按钮并填写给定的文本字段时,这意味着另一个字段隐藏在另一个单选按钮,将显示为空白,因此形式不会得到提交(因为validated_presence_of)。如何做我解决此去?谢谢如何从有条件地跳过验证字段中的验证?

<%= form_for @movie ,:url=>{:action =>"create"} do |f|%> 
<%= f.error_messages %>  
<%=f.text_field :title%> 
<%= f.text_field :description%> 

<%= f.radio_button :drama "drama" %>  
<div style="display:none"><%= f.text_field :director %></div>#this is displayed with javscript when you click radio button 

    <%= f.radio_button :action "action" %> 
    <div style="display:none"><%= f.text_field :producer %></div> #this is displayed with javscript when you click radio button 
    <%= f.submit "post"%> 

型号

 class Movie < ActiveRecord::Base 
     validates_presence_of :title 
    validates_presence_of :description 
     validates_presence_of :director 
    validates_presence_of :producer 
     end 

架构

 create_table "movies", :force => true do |t| 
     t.string "title" 
     t.text "description" 
     t.boolean "drama",          
     t.boolean "action" 
    end 

回答

4

这听起来像你说的所有字段都是必需的(所有的人都validates_presence_of)等表单不会提交,因为总是有这么一个ISN场”目前。在这种情况下,它当然不会。

显而易见的解决方案是:不强制每个字段的存在。也许你想要的是验证至少有一位导演和制作人在场。看看conditional validation

ETA:例如

validates_presence_of :director, :if => "producer.blank?" 
validates_presence_of :producer, :if => "director.blank?" 
+0

在我的情况下,你如何做至少一个?我不知道如何在这种情况下使用'if' – katie

+0

非常感谢你 – katie

+0

是否可以执行'validates_presence_of:director,:if =>“producer.blank?” AND“title.blank?”' – katie

1

试试这个:

class Movie < ActiveRecord::Base 
    validates_presence_of :title 
    validates_presence_of :description 
    validates_presence_of :director, :if => Proc.new { |m| m.producer.blank? } 
    validates_presence_of :producer, :if => Proc.new { |m| m.director.blank? } 
end 
0

你可以看看一个Conditional validationsActiveRecord那里你可以对有条件的验证定义验证和嵌套验证。