0

我正在寻找一种将自定义表单标签/字段类型添加到默认 Rails 表单构建器的方法。我正在寻找一种方法来做到这一点,而无需定义自定义表单构建器(如Rails 指南中所述

# form
= form_for @event do |f|
  = f.label :start_date
  = f.my_date_select :start_date

# custom my_date_select form tag method
# this doesn't work yet!
class ActionView::Helpers::FormBuilder
  def my_date_select(*args)
    date_select(*args)
  end
end

这个自定义表单标签背后的原因是我想在表单中干燥一些标记,这些标记以特定方式形成,以使用日期选择 jquery 插件。

# repeated across a few forms right now
= form_for @event do |f|
  .field
    = f.label :date
    .input-group
      span class='input-group-addon' = icon_tag(:calendar)
      = f.text_field :date, value: @event.date

感谢您提供任何提示、解决方案、文章!

4

1 回答 1

1

根据我的经验,这是干掉代码的错误方法。当我做这种事情时,我的包装器功能总是会失控。目前你真的只想干掉 text_field 的 value 属性,但是如果你还想包装输入的类怎么办?如果干燥值和类的规则开始只适用于特殊情况,你必须开始传入标志和/或在你的包装函数中做一些奇怪的、不透明的逻辑,这对于一个突然很难外人明白吗?

所以现在我建议你把注意力集中在不同的水平上——更高或更低。要将事物包装在更高级别(如果可能的话是理想的),您显然可以只使用 partial 并传入event. 要在较低级别包装,您可以只干燥每个单独的逻辑。因此,您可以在事件中使用装饰器并执行以下操作:

= f.text_field :date, value: @event.decorate.date_string
于 2013-10-16T08:35:43.090 回答