Alias -Methode -Kette in Ruby, die sich selbst anruft
-
25-09-2019 - |
Frage
Ich schreibe die Controller -Render -Methode neu, ich möchte jedoch die alte Methode bei der Methode render_to_string verwenden. Dies sind meine aktuellen Codes:
def render_with_xhr(options = {}, extra_options = {}, xhr_check = true, &block)
if xhr_check && request.xhr?
template = render_to_string(options)
render_without_xhr(:update) {|page| page.replace_html("#popup .dialog", template)}
else
render_without_xhr(options, extra_options, &block)
end
end
alias_method_chain :render, :xhr
Was passiert, dass ich, da Render_to_String (vermutlich) Render verwendet, in einer unendlichen Schleife landete. Wie kann ich es auf die alte Methode zurückgreifen, nur für diese Zeile meine neue Render -Methode?
Ich habe die Codes aus der akzeptierten Antwort optimiert. Der endgültige Code ist unten:
def render_to_string(options = {}, &block)
render(options, {}, false, &block)
ensure
response.content_type = nil
erase_render_results
reset_variables_added_to_assigns
end
def render_with_xhr(options = nil, extra_options = {}, xhr_check = true, &block)
if xhr_check && request.xhr?
template = render_to_string(options)
render_without_xhr :update do |page|
page.replace_html("#popup .dialog", template)
end
else
render_without_xhr(options, extra_options, &block)
end
end
alias_method_chain :render, :xhr
Lösung
Sie können in Zeile 2 einen einzigartigen Wert für Options -Hash übergeben, ihn dann in Ihrem Code erkennen und entfernen
def render_with_xhr(options = {}, extra_options = {}, xhr_check = true, &block)
if xhr_check && request.xhr? && !options.delete(:bacon)
template = render_to_string(options.merge(:bacon => true))
render_without_xhr(:update) {|page| page.replace_html("#popup .dialog", template)}
else
render_without_xhr(options, extra_options, &block)
end
end
alias_method_chain :render, :xhr
so wie das :)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow