我可能已经读完了,我已经经历了很多div / span尝试并且一次性抛出桌子,但桌子只有一些好的用途,其中一个是imho,是一种形式。我更喜欢使用不同的背景颜色来遮蔽我的标签字段。我尝试过可能的方法,但如果输入(实际上是)侧面溢出宽度,它将搞乱标签背景。我会看另一次尝试,但我更喜欢表格方法。
在2.x中,我将配置设置为:
config.wrappers :tag => :tr, :class => :input,
:hint_class => :field_with_hint, :error_class => :field_with_errors do |b|
b.use :label, :wrap_with => {:tag => :td, :class => :label}
b.use :input, :wrap_with => {:tag => :td, :class => :input}
b.use :hint, :wrap_with => { :tag => :span, :class => :hint }
b.use :error, :wrap_with => { :tag => :caption, :class => :error }
效果很好!除了错误。我首先把它作为一个跨度,它走到了桌面的顶端。然后我将它设置为标题,至少在Safari中,它结束tbody并放入标题并启动另一个tbody - 但它会搞砸表流。
有没有办法可以强制错误出现在输入包装器中?还是其他方法?我甚至接受(也许这就是我应该做的)将错误放在主要消息中,如脚手架方法。在我开始写这篇文章之前没有想过,但我想我不能使用简单的表单错误的东西,并回到脚手架的方法。
至少我认为你可以做到这一点。例如,我不知道(并且在文档中找不到 - 但我看起来并不是很难!)你可以使用与f.input混合的常规form_for输入(例如,f.text_field)。非常适合将City,St,Zip放在一排。
答案 0 :(得分:0)
我想我应该回答我自己的问题。我最终没有使用Simple Forms错误通知,而是回到了scaffold方法。
我按如下方式配置了包装器:
config.wrappers :tag => :tr, :class => :input,
:hint_class => :field_with_hint, :error_class => :field_with_errors do |b|
b.use :label, :wrap_with => {:tag => :td, :class => :label}
b.use :input, :wrap_with => {:tag => :td, :class => :input}
为错误写了一个帮助方法:
def show_form_errors(instance)
if instance.errors.any?
errors = content_tag(:h2, pluralize(instance.errors.count, "error") +"prohibited this project from being saved:")
list = content_tag :ul do
e = ""
instance.errors.full_messages.each do |msg|
e <<"<li>#{msg}</li>"
end
e.html_safe
end
return content_tag(:div, (errors + list),:id => "error_explanation").html_safe
end
end
# instead of
# = f.error_notification
# I used
# = show_form_errors(@event)
因为我在表行(只是border-bottom)上定义了边框,并且添加!important以用红色边框包裹tr,所以必须调整CSS for error_explanation:
.field_with_errors {
padding: 2px;
border:solid 3px red!important;
background-color:pink;
}
工作正常,我对这种方法感到满意。