Rails中的自定义表单标记/表单字段

时间:2013-10-16 06:59:25

标签: ruby-on-rails

我正在寻找一种方法将自定义表单标记/字段类型添加到默认的Rails表单构建器中。我正在寻找一种方法来执行此操作,无需定义自定义表单构建器(如here in the Rails guides所述。

# 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

感谢任何提示,解决方案,文章!

1 个答案:

答案 0 :(得分:1)

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

所以现在我建议你专注于在不同的水平上进行干燥 - 无论是更高还是更低。要将事物包装在更高的层次(如果可能的话,理想的话),您显然可以使用部分并传入event。要在较低级别进行换行,您可以干掉每个单独的逻辑。所以你可以在事件中使用装饰器并执行以下操作:

= f.text_field :date, value: @event.decorate.date_string