如何修改 Rails 3 表单生成器

发布于 2024-11-09 17:16:11 字数 310 浏览 0 评论 0原文

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

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

我想自动将

id 属性设置为 @post.object_id

并添加以下字段:hidden_​​field_tag :form_id, @post.object_id

我可以使用 alias_method_chain 执行此操作吗?

What is the best way to override form_for?

For example, in every form_for(@post),

I would like to automatically set the <form> id attribute to @post.object_id,

and add the following field: hidden_field_tag :form_id, @post.object_id

Can I do this using alias_method_chain?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

粉红×色少女 2024-11-16 17:16:11

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

Technically, you could probably achieve your goal by using alias_method_chain, but it would require parsing the form and injecting/modifying the content, which could get really ugly, really fast.

Instead, I'd suggest overriding form_for with your own custom version (the original source can be seen here http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for by clicking "show source" at the bottom).

One way to achieve this is described in a post I wrote recently: http://davidsulc.com/blog/2011/05/01/self-marking-required-fields-in-rails-3/

The difference being: instead of overriding the label method, you'll be rewriting the form_for method.

P.S.: out of curiosity, why do you need to expose the object_id?

简美 2024-11-16 17:16:11

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

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

This should work (it worked for me):

  <%= hidden_field(:post :form_id, :value => @post.object_id) %>
つ低調成傷 2024-11-16 17:16:11

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

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

In a Rails helper you can simply do something like:

def form_for(record, options = {}, &block)
  options[:id] = record.class.to_s + '-' + record.id
  super
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文