我正在尝试为模型电影保存表单。但是在表单的末尾我有两个单选按钮,当您单击它们时,它们将显示额外的隐藏字段(我最初隐藏这些字段)。用户是假设的只选择一个单选按钮来单击并填充额外的给定字段(生产者或导演字段)。此模型中的所有字段均为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
答案 0 :(得分:4)
听起来你说所有字段都是必需的(所有字段都有validates_presence_of
),所以你的表单不会提交,因为总有一个字段不存在。当然,在这种情况下它不会。
显而易见的解决方案是:不要强制执行每个字段。也许你想要的是验证至少有一个:director和:producer存在。看看conditional validation。
ETA:示例
validates_presence_of :director, :if => "producer.blank?"
validates_presence_of :producer, :if => "director.blank?"
答案 1 :(得分: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
答案 2 :(得分:0)
您可以使用ActiveRecord
查看Conditional validations,您可以对条件验证进行自定义验证和嵌套验证。