2011-11-15 76 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那裏你可以對有條件的驗證定義驗證和嵌套驗證。