如何修改Rails3表单生成器



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

例如,在每个form_for(@post)中,

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

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

我可以使用alias_method_chain吗?

从技术上讲,您可能可以通过使用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/

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

附言:出于好奇,你为什么要曝光object_id

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

  <%= hidden_field(:post :form_id, :value => @post.object_id) %>

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

def form_for(record, options = {}, &block)
  options[:id] = record.class.to_s + '-' + record.id
  super
end

相关内容

  • 没有找到相关文章

最新更新