Rails: правильный способ добавить функциональность в методы rails - PullRequest
0 голосов
/ 25 марта 2012

Я только начинаю возиться с расширением структуры rails, и в качестве эксперимента я подумал, что добавлю некоторую дополнительную информацию в помощник form_for. В частности, когда вызывается form_for, я хотел бы сгенерировать дополнительный тег h1, такой как:

# regular form_for <form> opening tag
<h1>Woohoo! It's added!</h1>
# tags fed into form_for via &proc
# form_for close <form> tag

На данный момент я добавил / lib файл, который открывает ActiveRecord :: FormHelper и переопределяет "форму для". Само собой разумеется, что выписывать весь метод form_for только с одной добавленной строкой - это уродливо, но я не могу вызвать super (), потому что, ну, вместо того, чтобы наследовать от метода, который я хотел бы super (), Я только что перезаписал это в /lib.

Итак, предполагая, что я упорно хочу функциональность называться через тот же form_for тег (вместо, например extended_form_for), что стандартный способ вызова обратно к исходному form_for методу я перезапись? alias_method_chain? Мысль, которую я хотел бы спросить, прежде чем закрепить некоторые потенциально паршивые практики. Если бы закаленные ветераны могли привести пример, я был бы благодарен.

Приветствия

Ответы [ 2 ]

5 голосов
/ 25 марта 2012

Вы можете переопределить form_for в вашем ApplicationHelper:

module ApplicationHelper
  def form_for(*)
    content_tag(:h1, "Woohoo! It's added!") + super
  end
end
1 голос
/ 25 марта 2012

alias_method_chain - безусловно, самый простой способ перезаписать метод, при этом все еще будучи в состоянии вызвать исходный метод. Так что в вашем файле lib вы захотите что-то вроде этого:

def form_for_with_header(...)
  form_for_without_header(...)
  content_tag(:h1, "Header tag here")
  # etc...
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...