0

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

-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"
4

1 回答 1

0

我认为没有重新定义 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}

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

于 2009-11-01T10:34:41.230 回答