Частичный рендеринг html в JSON JBuilder

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

[
  { 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]}.

person Kyle Decot    schedule 30.09.2013    source источник
comment
попробуй render partial: '/students/student'   -  person apneadiving    schedule 30.09.2013
comment
Это тоже не работает   -  person Kyle Decot    schedule 30.09.2013
comment
как называется ваш частичный? где оно живет?   -  person apneadiving    schedule 30.09.2013
comment
частичное рендеринг: '/students/student' могло не работать из-за того, что ведущий /. Попробуйте: визуализировать частично: «студенты/студенты»   -  person chris    schedule 11.12.2013


Ответы (4)


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

render partial: 'students/student.html.erb'
person mechanicalfish    schedule 30.09.2013
comment
Я пробовал render partial: 'students/student.html.haml', но получил Missing partial students/stundent.html.haml with {:locale=>[:en], :formats=>[:json], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee, :haml]}. - person Kyle Decot; 30.09.2013
comment
выдающийся? похоже на опечатку. Если вы скопировали из моего ответа, у меня там была такая же опечатка. - person mechanicalfish; 30.09.2013

Вам нужно указать частичный формат.

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

person uberllama    schedule 25.02.2014
comment
json.массив! @студенты делают |студент| json.html render('студент', форматы: [:html]) конец - person territorial; 14.09.2016
comment
спасибо, работает нормально. ````json.array! @студенты делают |студент| json.html render(студент, форматы: [:html]) конец ```` - person territorial; 14.09.2016

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

# 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>
person coisnepe    schedule 16.01.2018

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

person chris    schedule 11.12.2013
comment
путь, на который указывает частичный, обычно относится к относительному пути из папки app/views. - person chris; 11.12.2013