ruby-on-rails – 向FormBuilder添加一个方法,该方法调用一个渲染部分的辅助方法

ruby-on-rails – 向FormBuilder添加一个方法,该方法调用一个渲染部分的辅助方法,第1张

概述所以我有这个辅助方法,对吧? def table_form_field(name_or_options = nil, *args, &block) # ... render :partial => "snippets/table_form_field", :locals => optionsend 这很好,除非有时我想将它与表单构建器一起使用, 要做到这一点,我必须这样称呼它: tabl 所以我有这个辅助方法,对吧?

def table_form_fIEld(name_or_options = nil,*args,&block)  # ...  render :partial => "snippets/table_form_fIEld",:locals => optionsend

这很好,除非有时我想将它与表单构建器一起使用,
要做到这一点,我必须这样称呼它:

table_form_fIEld(:foo,:form_builder => f) do |name|  f.text_fIEld nameend

必须手动指定: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,&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?  endend
解决方法 您可以从表单构建器中访问名为@template的实例变量,这样您就可以在@template变量上调用table_form_fIEld.

例如,我将创建一个继承自ActionVIEw :: Helpers :: FormBuilder的自定义表单构建器

class MyFormBuilder < ActionVIEw::Helpers::FormBuilder  def table_form_fIEld(*attrs,&block)    @template.table_form_fIEld(*attrs,&block)  endend

然后在您的form_for中,您可以告诉它使用您的自定义表单构建器

<%= form_for @myobject,:builder => MyFormBuilder do |f| %>  <%= f.table_form_fIEld :myfIEld do %>  <% end %><%= end %>
总结

以上是内存溢出为你收集整理的ruby-on-rails – 向FormBuilder添加一个方法,该方法调用一个渲染部分的辅助方法全部内容,希望文章能够帮你解决ruby-on-rails – 向FormBuilder添加一个方法,该方法调用一个渲染部分的辅助方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1278559.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存