【问题标题】:Helper method that encapsulates two form_for blocks封装两个 form_for 块的辅助方法
【发布时间】:2009-11-01 08:56:48
【问题描述】:

你如何构建一个看起来像这样的辅助方法

-confirmation_for [@post, @comment] do |f|
  = f.confirm "Post"
  %p html here...
  = f.edit    "Edit"

并封装了两种形式

-form_for [@post, @commment] do |f|
  = f.hidden_field :submission_state, :value => "confirmed"
  = f.submit "Post"
%p html here...
-form_for [@post, @commment] do |f|
  = f.hidden_field :submission_state, :value => "edit_requested"
  = f.submit "Edit"

【问题讨论】:

    标签: ruby-on-rails form-for formbuilder


    【解决方案1】:

    我认为没有重新定义 form_for 的方法可以准确地获得您正在寻找的内容。或者编写您自己的版本。

    您可以使用 FormBuilders 或 Partials 或 Helpers,但这些概念都不能单独让您做您想做的事情。

    FormBuilder 将允许您定义要在表单上调用的方法,例如确认和编辑,但它们将是同一表单的一部分。除非您创建两个表单。

    在相关的帮助文件中:

    class ExampleFormBuilder < ActionView::Helpers::FormBuilder    
    
      def confirm
        hidden_field(:submission_state, :value => "confirmed") + "\n" + submit "Post"
      end
    
      def edit
        hidden_field(:submission_state, :value => "edit_requested") + "\n" + submit "Edit"
      end
    
    
    end
    

    示例用法:

    - form_for [@posts,@comments], :builder => ExampleFormBuilder do |f|
      = f.confirm
    - form_for [@posts,@comments], :builder => ExampleFormBuilder do |f|
      = f.edit
    

    当与局部一起使用时,你可以做这样的事情

    部分:

    - form_for [@posts,@comments], :builder => ExampleFormBuilder do |f|
      = f.send(action)
    

    查看:

    = render :partial => :confirmation_for, :locals => {:action => :confirm}
    = render :partial => :confirmation_for, :locals => {:action => :edit}
    

    然后您可以将两个部分调用捆绑到另一个部分中。但这有点太过分了。

    【讨论】:

      猜你喜欢
      • 2016-01-21
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      • 2012-08-07
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      • 1970-01-01
      相关资源
      最近更新 更多