Как изменить 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
Другие вопросы по тегам