2013-06-26 2 views
1

Я нахожусь в попытке реализовать несовершенное решение, чтобы не сломать существующий код.Захват 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 

Я попытался следующие с этими результатами:

  1. render_widget_container(thingy)

    Render and/or redirect were called multiple times in this action.

  2. 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... 
    ...  
    
  3. 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-код из моего помощника внутри моего контроллера?

+2

Возможно, вы хотите использовать "render_to_string"? (Http://stackoverflow.com/questions/13713250/render-to-string-partial-format-error-in-controller) – MrYoshiji

ответ

0

Вместо того, чтобы пытаться захватить отображаемый вывод в контроллере, я просто фиксирую действие визуализации в представлении. Не точное решение моего первоначального вопроса, но функциональное.