ash*_*int 5 renderpartial ruby-on-rails formbuilder
所以我有这个辅助方法,对吗?
def table_form_field(name_or_options = nil, *args, &block)
# ...
render :partial => "snippets/table_form_field", :locals => options
end
Run Code Online (Sandbox Code Playgroud)
这很好,但有时我想将它与表单生成器一起使用,为此我必须这样调用它:
table_form_field(:foo, :form_builder => f) do |name|
f.text_field name
end
Run Code Online (Sandbox Code Playgroud)
必须手动指定 :form_builder 很烦人。所以我的目标是扩展ActionView::Helpers::FormBuilder并添加一个新方法,如下所示:
class ActionView::Helpers::FormBuilder
def table_form_field(name_or_options, options, &block)
if name_or_options.is_a?(Hash)
name_or_options[:form_builder] = self
else
options[:form_builder] = self
end
# But... how can I call the helper?
# Hmm, I'll try this:
klass = Class.new do
include ApplicationHelper
end
klass.new.send(:table_form_field, name_or_options, options, &block)
# Thank you, Mario, but your princess is in another castle!
#
# Basically, this tries to call render, and for obvious
# reasons, klass doesn't know how to render.
#
# So... what do I do?
end
end
Run Code Online (Sandbox Code Playgroud)
小智 5
@template您可以访问从表单构建器中调用的实例变量,这样您就可以调用table_form_field该@template变量。
例如,我将创建一个继承自 ActionView::Helpers::FormBuilder 的自定义表单生成器
class MyFormBuilder < ActionView::Helpers::FormBuilder
def table_form_field(*attrs, &block)
@template.table_form_field(*attrs, &block)
end
end
Run Code Online (Sandbox Code Playgroud)
然后在你的 form_for 中你可以告诉它使用你的自定义表单生成器
<%= form_for @myobject, :builder => MyFormBuilder do |f| %>
<%= f.table_form_field :myfield do %>
<% end %>
<%= end %>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2232 次 |
| 最近记录: |