pdu*_*ler 3 actionview formbuilder ruby-on-rails-3
这与Trying扩展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
Run Code Online (Sandbox Code Playgroud)
安慰:
ruby-1.9.2-p180 :004 > ActionView::Helpers::FormBuilder.included_modules
=> [ActsAsTreeHelpers, ...]
Run Code Online (Sandbox Code Playgroud)
但以下给了我: 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 %>
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
我也有同样的问题.我试图在我的项目的文件夹配置/初始化程序中添加一个名为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
Run Code Online (Sandbox Code Playgroud)
form_builder.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 }
Run Code Online (Sandbox Code Playgroud)
_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 %>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3328 次 |
| 最近记录: |