如何在Rails中创建form_for表单助手?

时间:2014-08-10 11:14:48

标签: ruby-on-rails ruby

在我的Rails应用程序中,我使用这个帮助器方法创建一个带有隐藏字段的日期字段:

module FormatHelper

  def datepicker_field(object, date)
    object.text_field(:date_selector, :class => "datepicker") +
    object.hidden_field(date.to_sym, :id => "real_date")
  end

end

在我的表格中,我这样使用它:

<%= datepicker_field(f, :date) %>

如果我能做到的话,它会更优雅(和我的其他表单元素更相似):

<%= f.datepicker_field(:date) %>

fform_for区块)

如何在Rails中完成?

感谢您的任何建议。

2 个答案:

答案 0 :(得分:2)

多年前,我在Rails 3.1应用程序中做了类似的事情:

# in config/initializers/form_helpers.rb
module ActionView
  module Helpers
    module FormHelper
      def datepicker(object_name, method)
        text_field(:date_selector, :class => "datepicker") + hidden_field(object_name, method, :id => "real_date")
      end
    end

    class FormBuilder
      def datepicker(date)
        @template.datepicker(@object_name, method)
      end
    end
  end
end

答案 1 :(得分:1)

您可以创建FormBuilder的子类并将其传递给form_for

= form_for @user, builder: StandardFormBuilder do |f|

然后创建一个名为standard_form_builder.rb的文件并将其放在helpers文件夹中(至少这就是我所做的)

class StandardFormBuilder < ActionView::Helpers::FormBuilder
  def datepicker_field(method, html_options = {}
    text_field(:date_selector, :class => "datepicker") +
    hidden_field(method.to_sym, :id => "real_date")
  end
end

# view file
f.date_picker_field :date