我在使用Rails 4.2上的JBuilder(版本〜> 2.0)渲染JSON部分时出现问题。尽管存在文件,它仍然给我ActionView缺少部分错误,它似乎忽略了我提供的路径并搜索默认的魔术路径。我意识到将部分放在魔法路径上可以解决这个问题,但出于多种原因,最好保留部分位置并正确找到它。可以从my / views目录结构的其他地方(特别是/views/api/task_templates/_task_template.json.jbuilder
)正确找到partial。
主JBuilder文件,它本身是一个部分(_task_template.json.jbuilder):
json.task_files task_template.task_files.each do |file|
json.partial! file, partial: 'api/task_files/task_file', as: :task_file
end
部分文件(_task_file.json.jbuilder):
json.(task_file, :id, :file_type, :name, :original_path, :image_path, :icon, :organization_id, :viewer)
错误讯息:
ActionView::Template::Error:
Missing partial api/v1/task_files/_task_file with {:locale=>[:en], :formats=>[:json], :variants=>[], :handlers=>[:jbuilder]}. Searched in:
* "/Users/lucy/trail-app/app/views"
* "/Users/lucy/.rvm/gems/ruby-2.1.3@trail-app/gems/sidekiq_monitor-0.1.7/app/views"
* "/Users/lucy/.rvm/gems/ruby-2.1.3@trail-app/gems/devise_invitable-1.7.0/app/views"
* "/Users/lucy/.rvm/gems/ruby-2.1.3@trail-app/gems/devise-4.2.0/app/views"
这是我的目录结构:
/views > /api > /task_files > _task_file.json.jbuilder (THE MISSING PARTIAL)
> /v1 > /task_templates > _task_template.json.jbuilder (THE MAIN FILE)
答案 0 :(得分:2)
我终于在Ruby文档的深处找到了答案,同时寻找完全不同的东西,所以我在这里为任何可能寻找答案的人录制它。
不要在JBuilder文件中给出部分选项。将一个方法添加到您正在分组的类中,称为to_partial_path
。该方法应返回所需部分路径的字符串。
例如,就我而言:
主JBuilder文件:
json.task_files task_template.task_files.each do |file|
json.partial! file, as: :task_file
end
在TaskFile模型(task_file.rb)中:
class TaskFile
def to_partial_path
'api/task_files/task_file'
end
end
部分文件保持不变。这很有效。