我正在尝试为“广告素材”模型添加“尺寸”属性验证。 “广告素材”模式与“广告”一对一相关,其字段在“广告”表单中显示为嵌套表单(下方提供的代码)。
问题是,当我实际保存表单时,大小未经验证 - 既不是格式验证器,也不是:存在验证器(如果我添加一个)。同时,:验证过滤属性。
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 %>