2017-10-30 12 views
0
Rails 5.1 

In my controllers/fw_exports_conttroller.rb, I have: 

def import_spreadsheet 
    @import_spreadsheet = FwExport.new 
    render template: "fw_exports/_import_spreadsheet" 
end 

에 의해 발견되지 않는, 나는 다음과 같은 오류 메시지가 :템플릿은 레일

Processing by FwExportsController#import_spreadsheet as HTML 
ActionView::MissingTemplate (Missing template fw_exports/_import_spreadsheet with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :slim, :coffee, :jbuilder]}. Searched in: 
    * "/home/utils/rails/follower_wonk/app/views" 
    * "/home/utils/.rvm/gems/ruby-2.4.2/gems/devise_invitable-1.7.2/app/views" 
    * "/home/utils/.rvm/gems/ruby-2.4.2/gems/devise-4.3.0/app/views" 
): 
FATAL -- : [d37603eb-3da3-4ad2-b81b-29198e6bb773] app/controllers/fw_exports_controller.rb:67:in `import_spreadsheet' 

나는

app/views/fw_exports/_import_spreadsheet.html.slim 

이 존재하는 것을 확인. 어떤 아이디어? 아마도

+1

당신이'template' 또는'partial' 렌더링하고자하는 항목입니다 render nothing: true, status: 403

당신은 그것을 변경하여 오류를 수정할 수 있을까? 부분은'_'로 시작합니다. 템플릿은 그렇지 않습니다. 또한 부분을 렌더링 할 때 render 문에'_'을 포함하지 마십시오. 나는 당신이'render partial : 'fw_exports/import_spreadsheet''를 원한다고 생각하고 있습니까? – jvillian

답변

3

은 "_"fw_exports/_import_spreadsheet.html.slim은 파셜을 렌더링 할 때 당신이 partial 옵션을 건너 뛰고 사용자의 경우, views 폴더 후 파일의 경로를 전달할 수 있습니다, 부분과 같습니다

def import_spreadsheet 
    @import_spreadsheet = FwExport.new 
    render 'fw_exports/import_spreadsheet' 
end 

render 'fw_exports/import_spreadsheet' 부분 파일을 허용하지 않는 template 옵션과 달리 파일에 "_"접두사가 없더라도 작동합니다.

+0

멋지다! 이 솔루션에는 거의 동일한 구현이 있습니다. +1 – Cyzanfar

+0

이것은 효과가 있습니다. 나는 그것을 템플릿으로 시험해 보았다. 내가 템플릿을 제거했을 때 : 그것은 효과가 있었고 물론 언더 스코어를 제거했습니다. – EastsideDeveloper

1

또는 : 당신이 app/views/fw_exports/import_spreadsheet.html.slim (뷰, 부분되지 않음)이있는 경우

class FwExportsController < ApplicationController 

    def import_spreadsheet 
    @import_spreadsheet = FwExport.new 
    end 

end 

, 그럼 나는 그것이 기본/규칙에 따라 렌더링 것이라 생각합니다. 으로

+0

가장 확실한 해결책 +1! – Cyzanfar

2

Layout documentationthis post에서 부분의 밑줄을 넣으면 안됩니다.

레일이 뷰가 다른 컨트롤러에 속한다는 것을 알고 문자열에 포함 된 슬래시 문자의 이유는

기타 문서

는 것을 말한다.

당신이 다루고 있기 때문에 당신이 컨트롤러의 경로를 제공 할 필요가 없습니다 것을 의미합니다 (이전 레일 2.2에 필요한되고) 템플릿 옵션 : 당신이 명시 할 경우, 당신은을 사용할 수 있습니다 여기에 같은 하나 : @ 당으로

SebastiánPalma 단순히 문제를 해결해야 편집

def import_spreadsheet 
    @import_spreadsheet = FwExport.new 
    render "fw_exports/import_spreadsheet" 
end 

을 제안했다. 또한 template은 Rails V2.2 이전에 필요했지만 5.1을 사용하고 있으므로 사용하지 않아도됩니다. 당신은 간단히 할 수 있습니다 render 'import_spreadsheet'

+0

'render 'import_spreadsheet''로 사용되었습니다.'template' 옵션을 사용하면 "Missing template/import_spreadsheet"가 나타납니다. 충분히 - 레일즈 5.1.4. –

+0

나는'template'을 사용해 주셔서 렌더링 할 템플릿의 상대 경로를 제공해야한다고 생각합니다! – Cyzanfar

+1

빠른 질문입니다. OP가'FwExportsController'의'import_spreadsheet' 액션에 있기 때문에, OP는'import_spreadsheet'라는 이름의 뷰를 가질 수 없으며 렌더 라인을 건너 뛰었습니까? – jvillian

-2

나는 TemplatePartial이 아닌 것으로 렌더링해야한다고 가정합니다.

Template을 렌더링하려면 _import_spreadsheet.html.slim의 이름을 import_spreadsheet.html.slim으로 바꿔야합니다.

는 코드에서

1 단계 여기

def import_spreadsheet 
    @import_spreadsheet = FwExport.new 
    render template: "fw_exports/import_spreadsheet" 
end 

을 필요한 아래의 수정은 파일 이름 바꾸기 _

_import_spreadsheet에서 단계 2

를 제거해야 app/views/fw_exports/import_spreadsheet.html.slim 대신 app/views/fw_exports/_import_spreadsheet.html.slim

+0

템플릿의 이름을 바꿀 필요가 없습니다. 또한 다른 뷰가 해당 뷰를 부분 렌더링하면 해당 뷰가 중단됩니다. – Cyzanfar

0

방금 ​​레일스 5.1로 업데이트하고이 오류가 표시되는 경우 컨트롤러에서 render nothing을 사용하면 Rails 5.1에서이 메서드가 제거 되었기 때문에이 오류가 발생할 수도 있습니다. 이것은 때때로 컨트롤러 라인이 스택 추적에서 몇 레벨 깊이가 될 수 있기 때문에 항상 즉시 나타나는 것은 아닙니다. 그러나 스택 추적에서 모든 컨트롤러의 줄 번호를 확인하고 render nothing을 발견하면 범인을 찾았습니다. 이것이 실제로 문제가된다면,이 오래된 방법을 대체하기 만하면됩니다. 기존 코드가 있다면

예를 들어, : head :forbidden