2

覆盖的最佳方法是form_for什么?

例如,在每个form_for(@post)

我想自动将<form>id 属性设置为@post.object_id,

并添加以下字段:hidden_field_tag :form_id, @post.object_id

我可以这样做alias_method_chain吗?

4

3 回答 3

3

从技术上讲,您可能可以通过使用来实现您的目标alias_method_chain,但它需要解析表单并注入/修改内容,这可能会变得非常丑陋,非常快。

相反,我建议form_for用您自己的自定义版本覆盖(原始源可以在这里查看http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for点击“显示源“ 在底部)。

我最近写的一篇文章中描述了实现这一点的一种方法:http: //davidsulc.com/blog/2011/05/01/self-marking-required-fields-in-rails-3/

不同之处在于:label您将重写该方法,而不是重写该form_for方法。

PS:出于好奇,为什么要曝光object_id

于 2011-05-25T13:01:15.560 回答
2

这应该有效(它对我有用):

  <%= hidden_field(:post :form_id, :value => @post.object_id) %>
于 2012-11-18T22:34:31.537 回答
0

在 Rails 助手中,您可以简单地执行以下操作:

def form_for(record, options = {}, &block)
  options[:id] = record.class.to_s + '-' + record.id
  super
end
于 2014-01-17T20:46:37.990 回答