Вызов рендеринга Rails не будет отображаться при вызове из помощника

У меня есть раздел кода, который работает при размещении в представлении, но не отображается, когда код перемещается в помощник. Я знаю, что код выполняется, потому что сервер показывает вызов рендеринга, но в браузере нет вывода.

Это работает (при размещении в файле просмотра)

<% vidList = "ylLzyHk54Z0", "ylLzyHk54Z0", "ylLzyHk54Z0", "ylLzyHk54Z0" %>
<% i=1 %>
<% vidList.each do |v| %>
  <%= render partial: 'loadvid', locals: {vidId: i.to_s, divId: "vid"+i.to_s, vidURL: v } %>
  <% i=i+1 %>
<% end %>

Это не так.

module VidsHelper
  def loadvids(vidList)
    i=1
    vidList.each do |v|
      render partial: 'loadvid', locals: {vidId: i.to_s, divId: "vid"+i.to_s, vidURL: v }
      i=i+1
    end
  end
end

Как я уже сказал, я знаю, что метод вызывается, потому что сервер сообщает, что _loadvid.html.erb отрисовывался 4 раза. Он вызывается с

<% vidList = "ylLzyHk54Z0", "ylLzyHk54Z0", "ylLzyHk54Z0", "ylLzyHk54Z0" %>
<% loadvids vidList %>

Когда я просматриваю исходный код в браузере, абсолютно ничего не отображается.


person Matthew Charles    schedule 17.04.2014    source источник
comment
Попробуйте ‹%= loadvids vidList %›   -  person dostu    schedule 18.04.2014
comment
Это уже пробовал. Просто показывает содержимое массива vidlist и тоже не работает.   -  person Matthew Charles    schedule 18.04.2014


Ответы (1)


Насколько я могу судить, любой вызов в пределах ‹% %> не будет отображаться. Однако вызов функции в пределах ‹%= %> показывает вывод метода, а не вывод рендеринга. Единственное решение, которое я вижу, - это захватить вывод рендеринга, а затем повторно отрендерить его. Текущий рабочий код таков:

В представлении:

  <%= render inline: loadvids(vidList) %>

В помощнике:

def loadvids (vidList)
    i=1
    capture = []
    vidList.each do |v|
        capture.push render partial: "loadvid", locals: {vidId: i.to_s, divId: "vid"+i.to_s, vidURL: v }
        i=i+1
    end
    capture.join
end
person Matthew Charles    schedule 18.04.2014
comment
Вы можете принять свой собственный ответ, если это решение работает для вас. - person Quinn; 20.04.2014