Как изменить Rails 3 конструктор форм - PullRequest
2 голосов
/ 25 мая 2011

Каков наилучший способ переопределить form_for?

Например, в каждом form_for(@post),

Я бы хотел автоматически установить атрибут <form> id на @post.object_id,

и добавить следующее поле: hidden_field_tag :form_id, @post.object_id

Могу ли я сделать это, используя alias_method_chain?

Ответы [ 3 ]

3 голосов
/ 25 мая 2011

Технически, вы, вероятно, могли бы достичь своей цели, используя 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.

П.С .: из любопытства, зачем вам разоблачать object_id?

2 голосов
/ 19 ноября 2012

Это должно сработать (у меня сработало):

  <%= hidden_field(:post :form_id, :value => @post.object_id) %>
0 голосов
/ 18 января 2014

В Rails helper вы можете просто сделать что-то вроде:

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