Я нахожусь в попытке реализовать несовершенное решение, чтобы не сломать существующий код.Захват HTML-вывода из вспомогательного метода в Rails
У меня есть существующий вспомогательный метод в вспомогательном классе Rails, который выборочно предоставляет один из нескольких парциальных на основе параметра:
def render_widget_container(thingy)
if thingy.is_awesome?
render(partial: 'thingies/awesome', locals: {thingy: thingy })
elsif thingy.sucks?
render(partial: 'thingies/sucky', locals: {thingy: thingy })
end
end
В контроллере, я хотел бы, чтобы захватить выход из этого помощника, и положить его в качестве одного из значений в хэш JSON следующим образом:
@thingy = Thingy.find(params[:id])
respond_to do |format|
format.json {
{:name => "thingy 1", :html => render_widget_container(thingy) }
}
end
Я попытался следующие с этими результатами:
render_widget_container(thingy)
Render and/or redirect were called multiple times in this action.
capture(render_widget_container(thingy))
(eval):1: syntax error, unexpected $undefined $["<div id=\"video_container\"... ^ (eval):1: syntax error, unexpected ']', expecting $end ...r'></div>\n </div>\n</div>\n"] = ["<DIV ID=\"VIDEO_CONTAINE... ...
capture(render_to_string(render_widget_container(thingy)))
*SHIT TON OF ESCAPED HTML* is not an ActiveModel-compatible object that returns a valid partial path.
Вопросы в сторону о том, ПОЧЕМУ вы хотели бы сделать такую вещь, как бы я начал собирать сгенерированный HTML-код из моего помощника внутри моего контроллера?
Возможно, вы хотите использовать "render_to_string"? (Http://stackoverflow.com/questions/13713250/render-to-string-partial-format-error-in-controller) – MrYoshiji