2013-09-30 3 views
13

Я рендеринг JSON некоторых студентов с использованием JBuilder в Rails 4. Я хочу, чтобы каждый студент, чтобы иметь «HTML» атрибут, который содержит HTML парциальным для данного студента:Рендер HTML частичного в JSON JBuilder

[ 
    { html: "<b>I was rendered from a partial</b>" } 
] 

Я попробовал следующее:

json.array! @students do |student| 
    json.html render partial: 'students/_student', locals: { student: student } 
end 

Но это дает мне:

Missing partial students/_student with {:locale=>[:en], :formats=>[:json], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee, :haml]}. 
+0

попытка 'оказывать частичное:«/ студентов/student'' – apneadiving

+0

Это не работает либо –

+0

что название вашей частичной? где оно живет? – apneadiving

ответ

15

Вы должны указать частичный формат, как Rails, будет выглядеть неполным с текущим форматом (json) по умолчанию. Например:

render partial: 'students/student.html.erb' 
+0

Я попробовал 'render partial: 'students/student.html.haml'', но получил' Missing partial students/stundent.html.haml с {: locale => [: en], : formats => [: json],: handlers => [: erb,: builder,: raw,: ruby,: jbuilder,: coffee,: haml]}. ' –

+0

stundent? похоже на опечатку. Если вы скопировали мой ответ, у меня была такая же опечатка. – mechanicalfish

0

Rails обертоны использовать подчеркивание в имени файла, но не в коде, когда ссылаются как строка (в зависимости от того, как вы загружаете их, конечно). Обычно частичные вызовы posts/_post.html.haml будут указаны в коде как render: partial => 'posts/post'

+0

путь, к которому относятся частичные точки, обычно относится к относительному пути из папки приложений/представлений. – chris

2

Необходимо указать частичный формат.

json.array! @students do |student| json.html render(student, formats: [:html]) end

+0

json.array! @students do | student | json.html render ('student', formats: [: html]) end – territorial

+0

спасибо, он отлично работает. '' '' json.array! @students do | student | json.html render (student, formats: [: html]) end '' '' – territorial

0

Вот что работает для меня:

# students/index.json.jbuilder 
json.array! @students do |student| 
    json.html render partial: 'student.html.erb', locals: { student: student } 
end 

# students/_student.html.erb 
<h4><%= student.name %></h4> 
Смежные вопросы