2017-02-08 7 views
0

Rails 4.2에서 JBuilder (버전 ~> 2.0)로 JSON 부분을 렌더링하는 데 문제가 있습니다. 그것은 내가 존재하는 파일에도 불구하고 ActionView에 부분 오류가 누락되어 있으며, 내가 제공하는 경로를 무시하고 기본 마법 경로를 검색하는 것처럼 보입니다. 나는 부분을 마법의 길에 두는 것이 그것을 고쳐 줄 것이라는 것을 깨닫는다. 그러나 여러 가지 이유 때문에 그것이 어디에 있는지 정확하게 찾아내는 것이 바람직 할 것이다. 부분이 내/views 디렉토리 구조의 다른 곳에서 올바르게 발견되고 있습니다 (특히 /views/api/task_templates/_task_template.json.jbuilder). 자체 부분 (_task_template.json.jbuilder)입니다Rails/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

부분 경로로 제공 해보시겠습니까? 해당 경로에 파일이 없으며 유일한 task_file 부분은'/ views/api/task_files/_task_file.json.jbuilder'입니다. – Squig

+0

부분 경로로 예. ./task_files/_task_file 또는 task_files/_task_file을 시도하십시오. –

답변

0

완전히 다른 것을 찾고있는 중에 Ruby 문서의 깊이에 대한 답을 찾았습니다. 그래서 대답을 찾고있는 누군가를 위해 여기에 기록하고 있습니다.

JBuilder 파일에 부분 옵션을 지정하지 마십시오. to_partial_path이라는 부분을 만드는 클래스에 메소드를 추가하십시오. 이 메소드는 원하는 부분으로의 경로 문자열을 반환해야합니다.

예를 들어, 내 경우 :

홈페이지 제이빌더 파일 다음 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 

그리고 일부 파일을 동일하게 유지 . 그거야.