2017-02-08 1 views
0

Rails 4.2でJBuilder(バージョン〜> 2.0)を使用してJSON部分をレンダリングする際に問題が発生しました。これは、ファイルが存在するにもかかわらず、ActionViewに部分エラーが見つからないことを示しています。私が提供するパスを無視して、デフォルトのマジックパスを検索しているようです。私は部分を魔法の道に置くことはそれを修正するだろうが、いくつかの理由から、それがどこにあるのかを正しく把握しておくことが望ましいだろうことを認識しています。部分は、my/viewsディレクトリ構造内の別の場所(正確には/views/api/task_templates/_task_template.json.jbuilder)から正しく検出されています。Rails/JBuilderで既存ファイルの部分エラーが見つかりません

部分(_task_template.json.jbuilder)そのものであるメイン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/[email protected]/gems/sidekiq_monitor-0.1.7/app/views" 
      * "/Users/lucy/.rvm/gems/[email protected]/gems/devise_invitable-1.7.0/app/views" 
      * "/Users/lucy/.rvm/gems/[email protected]/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

./v1/task_files/_task_fileを試すことができますか? –

+0

これを部分的な経路として提供してください。そのパスにはファイルがありません。タスクファイル部分のみが '/ views/api/task_files/_task_file.json.jbuilder'にあります。 – Squig

+0

部分パスとしてYesです。 ./task_files/_task_fileか、単にtask_files/_task_fileを試してください。 –

答えて

0

まったく別のものを探しているうちにRubyのドキュメントの深みでこれを見つけたので、答えを探している人のためにここに記録します。

JBuilderファイルで部分オプションを指定しても構いません。 to_partial_pathと呼ばれる部分的なクラスにメソッドを追加します。そのメソッドは、あなたが望む部分へのパスの文字列を返さなければなりません。

は例えば、私の場合:

メインJBuilderのファイル:TaskFileモデルで

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 

そして、部分的なファイルと同じまま。それは動作します。

関連する問題