ruby-on-rails-3 - 如何正确扩展 form_for/ActionView::Helpers::FormBuilder?

标签 ruby-on-rails-3 actionview formbuilder

这类似于 Trying to extend ActionView::Helpers::FormBuilder但我不想使用 :builder => MyThing。

我想扩展表单生成器以添加自定义方法。这是目前的情况:

module ActsAsTreeHelpers
  def acts_as_tree_block(method, &block)
    yield if block_given?
  end

end


ActionView::Helpers::FormBuilder.send :include, ::ActsAsTreeHelpers

控制台:

ruby-1.9.2-p180 :004 > ActionView::Helpers::FormBuilder.included_modules
=> [ActsAsTreeHelpers, ...]

但以下内容给了我:undefined method acts_as_tree_block for #<ActionView::Helpers::FormBuilder:0xae114dc>

<%= form_for thing do |form| %>
  <%= form.acts_as_tree_block :parent_id, {"test"} %>
<% end %>

我在这里错过了什么?

最佳答案

我也遇到了同样的问题。 我尝试在我的项目的文件夹 config/initializers 中添加一个名为 form_builder.rb 的新文件,它现在运行良好。

下面是我的解决方案的一些内容。 base_helper.rb

def field_container(model, method, options = {}, &block)
  css_classes = options[:class].to_a
  if error_message_on(model, method).present?
    css_classes << 'withError'
  end
  content_tag('p', capture(&block), :class => css_classes.join(' '), :id => "#{model}_#{method}_field")
end

表单生成器.rb

class ActionView::Helpers::FormBuilder
  def field_container(method, options = {}, &block)
    @template.field_container(@object_name,method,options,&block)
  end

  def error_message_on(method, options = {})
    @template.error_message_on(@object_name, method, objectify_options(options))
  end
end
ActionView::Base.field_error_proc = Proc.new{ |html_tag, instance| "<span class=\"field_with_errors\">#{html_tag}</span>".html_safe }

_form.html.erb

<%= f.field_container :name do %>
  <%= f.label :name, t("name") %> <span class="required">*</span><br />
  <%= f.text_field :name %>
  <%= f.error_message_on :name %>
<% end %>

关于ruby-on-rails-3 - 如何正确扩展 form_for/ActionView::Helpers::FormBuilder?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6276456/

相关文章:

ruby-on-rails - 从 Rails 2.x 升级到 3.x 的主要优点/好处是什么?我们应该等待下一个版本吗?

ruby-on-rails - ActiveAdmin 和 CircleCI : autoloader causes Postgres to fail

ruby-on-rails - 为什么 submit_tag 生成名称为 ="commit"属性的 HTML?

ruby-on-rails - Rails 3 中的动态错误页面

html - 如何将 CSS ID 属性设置为 Symfony2 表单输入

mysql - Rails 3.1 - 保存带有日期的多个模型

ruby-on-rails - 路由 : resources, 使用成员或集合进行自定义操作?

ruby-on-rails-3 - Rails 3未加载HAML处理程序

Symfony - 如何以 "many-to-one"形式保存外键

Symfony2 和表单主题/自定义(必需/帮助/错误)