非模型字段未以嵌套形式验证

时间:2013-02-19 07:32:52

标签: ruby-on-rails-3 nested-forms attr-accessor

我正在尝试为“广告素材”模型添加“尺寸”属性验证。 “广告素材”模式与“广告”一对一相关,其字段在“广告”表单中显示为嵌套表单(下方提供的代码)。

问题是,当我实际保存表单时,大小未经验证 - 既不是格式验证器,也不是:存在验证器(如果我添加一个)。同时,:验证过滤属性。

Size是一个非模型属性,添加了attr_acessor方法和自定义setter和getter。

寻找修复此代码的方法或任何不同的解决方案来为非模型嵌套属性添加验证将非常感激。

控制器:

class Creative < ActiveRecord::Base
  attr_accessible :size, :filter
  belongs_to :ad
  attr_accessor :size
  validates :size, :format => { :with => /^\d+x\d+$/, :message => "Incorrect size param. Should be [width]x[height], e.g. 320x50" }
  validates :filters, :presence => true

  def size
    "#{self.width}x#{self.height}"
  end

  def size=(size)
      @width, @height = size.split("x").map(&:to_i)
  end
end

class Ad < ActiveRecord::Base
  attr_accessible :creative_attributes
  has_one :creative
  accepts_nested_attributes_for :creative

  validates_associated :creative
end

class Campaign < ActiveRecord::Base
  has_many :ads
end

形式:

<%= simple_form_for [:rtb, @campaign, @ad], :html => { :class => 'form-horizontal' } do |f| %>
    <% if @ad.errors.any? %>
        <div id="error_explanation" class="alert alert-error">
            <h2><%= pluralize(@ad.errors.count, "error") %> prohibited this ad from being saved:</h2>

            <ul>
                <% @ad.errors.full_messages.each do |msg| %>
                    <li><%= msg %></li>
                <% end %>
            </ul>
        </div>
    <% end %>
            <%= f.input :name  %>
            <%= f.simple_fields_for :creative do |creative_f| %>
            <fieldset>
                <legend>Creative Settings</legend>
            <%= creative_f.input :size %>
            <%= creative_f.input :filters %>
            </fieldset>
        <% end %>
        <%= f.button :submit, :class => 'btn-primary' %>
<% end %>

0 个答案:

没有答案