0

Мой контроллер возвращает список пользователей и отображает javascript-файл (ненавязчивый javascript). Я хочу пропустить этот список пользователей и сделать частичным для каждого в div. У меня есть следующий код:Render partial для каждого элемента в списке, используя Rails unobtrusive javascript

вид:

<div id="searched-users-div"></div> 

.js файл вернулся из контроллера

$('#searched-users-div').html(
    "<%= 
     if @searched_users and @searched_users.length > 0 
      @searched_users.each do |user| 
       escape_javascript(render(:partial => "shared/user_block", :locals => { :user => user })) 
      end 
     end 
    %>"); 

распечаток это к DIV:

[#<User id: 1, name:...>] 

Это не кажется работать. Кажется, просто напечатайте массив как обычный текст, без html или что-нибудь еще, внутри div. Есть ли способ перебрать массив @searched_users и сделать частичным для каждого?

Или я должен просто создать новое частичное, которое принимает массив искомых лиц и прокручивает его внутри?

+0

Можете ли вы уточнить, что вы подразумеваете под «не пройти первый визуализации» - вы видите ошибку? – PinnyM

+0

Извините, обновил мое сообщение. Он печатает массив как обычный текст внутри div. – dmoss18

ответ

3

Удалите кавычки до и после встроенного рубина тегов ("<%= и %>" должны быть <%= и %>). И использовать map с join для конкатенации нескольких визуализаций:

$('#searched-users-div').html(
    <%= j(if @searched_users 
      @searched_users.map do |user| 
       render(:partial => "shared/user_block", :locals => { :user => user }) 
      end.join("\n") 
      else 
      '' 
      end) %>); 
+0

Вы также можете переместить условный и цикл для обработки случая, когда '@ search_users' является' nil', иначе вы собираетесь вызывать '.html (nil)' (или '.html()' с без содержания). –

+0

@JimStewart, хорошая точка - обновлено. – PinnyM