Как изменить Rails 3 конструктор форм
Какой лучший способ переопределить form_for
?
Например, в каждом form_for(@post)
,
Я хотел бы автоматически установить <form>
атрибут id для @post.object_id
,
и добавьте следующее поле: hidden_field_tag :form_id, @post.object_id
Могу ли я сделать это с помощью alias_method_chain
?
3 ответа
Технически, вы можете достичь своей цели, используя alias_method_chain
, но это потребовало бы анализа формы и внедрения / изменения содержимого, что могло бы стать очень уродливым, очень быстрым.
Вместо этого я бы предложил переопределить form_for
с вашей собственной пользовательской версией (исходный источник можно увидеть здесь http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html, нажав "показать источник" внизу).
Один из способов достижения этого описан в посте, который я недавно написал: http://davidsulc.com/blog/2011/05/01/self-marking-required-fields-in-rails-3/
Разница в том, что вместо переопределения label
метод, вы будете переписывать form_for
метод.
PS: из любопытства, зачем вам выставлять 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