ruby-on-rails - 如何有条件地跳过验证字段中的验证?

标签 ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我正在尝试为模型电影保存一个表单。但是在表单的末尾我有两个单选按钮,当您单击它们中的每一个时,它们将显示额外的隐藏字段(我最初隐藏这些字段)。用户被假定为只选择一个单选按钮来单击并填写一个额外的给定字段(制片人或导演字段)。此模型中的所有字段都是 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

最佳答案

听起来您是在说所有字段都是必填字段(所有字段都有 validates_presence_of),因此您的表单不会提交,因为总有一个字段不存在。当然不会,那样的话。

显而易见的解决方案是:不要强制要求每个字段都存在。也许您想要的是验证至少存在 :director 和 :producer 之一。看看conditional validation .

预计到达时间:例子

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

关于ruby-on-rails - 如何有条件地跳过验证字段中的验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8141966/

相关文章:

ruby-on-rails - 在 Rails 中将数据公开为 XML 和 JSON

ruby-on-rails - 运行 Rails 应用程序时出错 - ExecJS::RuntimeError

ruby-on-rails - Rails ckeditor 在 "*": expected "{", 之后无效的 CSS 是 "html .cke_uicol..."

ruby-on-rails - Rails 模型错误 AssociationTypeMismatch expected, got String

ruby-on-rails - 如何重新定义 ruby​​ 和 rails request.ip 和 request.remote_ip 方法?

ruby-on-rails - Devise - 自动删除在定义的时间段后尚未确认的帐户

ruby-on-rails-3.1 - 将 CKEditor 与 Rails 3.2 集成

Javascript 在本地工作,但部署到 Heroku 后不再工作。 (带有涡轮链接。)

ruby-on-rails - 部署到heroku后如何清除rails缓存?

ruby-on-rails - 部分避免这种 if else 逻辑的最佳方法? -- rails 3.1