覆蓋form_for
的最佳方法是什麼?如何修改Rails 3表單生成器
例如,在每一個form_for(@post)
,
我想自動設置<form>
id屬性@post.object_id
,
,並添加以下字段:hidden_field_tag :form_id, @post.object_id
我能做到這一點使用alias_method_chain
?
覆蓋form_for
的最佳方法是什麼?如何修改Rails 3表單生成器
例如,在每一個form_for(@post)
,
我想自動設置<form>
id屬性@post.object_id
,
,並添加以下字段:hidden_field_tag :form_id, @post.object_id
我能做到這一點使用alias_method_chain
?
從技術上講,你可能通過使用alias_method_chain
來實現你的目標,但它需要解析表單並注入/修改內容,這可能會變得非常難看,非常快。
相反,我會建議用您自己的自定義版本覆蓋form_for
(通過點擊底部的「show source」可以看到原始源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
方法。
P.S .:出於好奇,爲什麼你需要暴露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
是否有使用OBJECT_ID任何問題? – deb 2011-05-25 20:03:04
好吧,'object_id'基本上是Ruby的內部業務。 Ruby中很少有需要使用'object_id'的情況,我想不出爲什麼需要在Rails中公開它的原因。另外,對於給定的數據庫記錄,每次將其加載到內存中時,oject_id基本上都會有所不同(您可以通過在Rails控制檯中重複調用「Post.first.object_id」來嘗試)。我只是想,可能有更好的方法來實現你的目標(不管它是什麼)比使用'object_id'屬性... – 2011-05-26 12:47:39