在JSON JBuilder中呈现HTML局部视图

17

我正在使用Rails 4中的JBuilder呈现一些学生的JSON。我希望每个学生都有一个“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]}.

尝试使用 render partial: '/students/student' - apneadiving
那也不行。 - Kyle Decot
你的 Partial 叫什么名字?它在哪里? - apneadiving
1
渲染局部视图:'/students/student' 可能无法工作,因为有一个前导的 /。请尝试:render partial: 'students/student'。 - chris
4个回答

25

您需要指定局部视图的格式,因为Rails默认会查找与当前格式(json)相同的局部视图。例如:

您必须指定部分格式,否则Rails默认会查找当前格式(json)的部分。例如:

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

我尝试使用 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]}. 的错误提示。 - Kyle Decot
学生?看起来像是打错了。如果你是从我的答案复制的,那里也有同样的拼写错误。 - mechanicalfish

7

您需要指定部分格式:

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

json.array! @students do |student| json.html render('student', formats: [:html]) end - territorial
谢谢,它运行良好。 json.array! @students do |student| json.html render(student, formats: [:html]) end - territorial

1
这是对我有效的方法:

# 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>

0
Rails的局部视图文件名使用下划线,但在代码中引用时不使用下划线作为字符串(当然,这取决于你如何加载它们)。通常情况下,名为posts/_post.html.haml的局部视图将在代码中被引用为render :partial => 'posts/post'。

部分视图指向的路径通常是相对于 app/views 文件夹的相对路径。 - chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接