使用Rails / JBuilder丢失现有文件的部分错误

时间:2017-02-08 10:18:02

标签: ruby-on-rails jbuilder

我在使用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)

1 个答案:

答案 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

部分文件保持不变。这很有效。