Rails/JBuilder 的现有文件缺少部分错误
Missing partial error for existing file with Rails/JBuilder
我在 Rails 4.2 上使用 JBuilder(版本 ~>2.0)渲染 JSON 部分时遇到问题。尽管文件存在,但它给我 ActionView missing partial 错误,它似乎忽略了我提供的路径并搜索默认的魔法路径。我意识到将部分放在魔法路径上会修复它,但出于多种原因,最好将部分保留在原处并正确找到它。从我的 /views 目录结构中的其他地方(特别是 /views/api/task_templates/_task_template.json.jbuilder
)中的其他地方可以正确找到该部分。
主 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)
我在寻找完全不同的东西的同时,终于在 Ruby 文档的深处找到了这个问题的答案,所以我把它记录在这里,供任何可能来寻找答案的人使用。
甚至不必费心在 JBuilder 文件中提供部分选项。添加一个方法,到你正在制作的 class 部分,称为 to_partial_path
。该方法应该 return 您想要的部分路径的字符串。
例如,在我的例子中:
JBuilder 主文件:
json.task_files task_template.task_files.each do |file|
json.partial! file, as: :task_file
end
在任务文件模型中(task_file.rb):
class TaskFile
def to_partial_path
'api/task_files/task_file'
end
end
部分文件保持不变。行得通。
我在 Rails 4.2 上使用 JBuilder(版本 ~>2.0)渲染 JSON 部分时遇到问题。尽管文件存在,但它给我 ActionView missing partial 错误,它似乎忽略了我提供的路径并搜索默认的魔法路径。我意识到将部分放在魔法路径上会修复它,但出于多种原因,最好将部分保留在原处并正确找到它。从我的 /views 目录结构中的其他地方(特别是 /views/api/task_templates/_task_template.json.jbuilder
)中的其他地方可以正确找到该部分。
主 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)
我在寻找完全不同的东西的同时,终于在 Ruby 文档的深处找到了这个问题的答案,所以我把它记录在这里,供任何可能来寻找答案的人使用。
甚至不必费心在 JBuilder 文件中提供部分选项。添加一个方法,到你正在制作的 class 部分,称为 to_partial_path
。该方法应该 return 您想要的部分路径的字符串。
例如,在我的例子中:
JBuilder 主文件:
json.task_files task_template.task_files.each do |file|
json.partial! file, as: :task_file
end
在任务文件模型中(task_file.rb):
class TaskFile
def to_partial_path
'api/task_files/task_file'
end
end
部分文件保持不变。行得通。