carrierwave + rails6에서 TypeError (no implicit conversion of nil into String) 오류가 발생한 경우 해결 방법
쓰기 배경
carrierwave+rails6에서 이미지와 음성의 다중 업로드 기능을 구현해 시험에 동작 체크했는데, no implicit conversion of nil into String 에러가 발생해, 업로드할 수 없게 되는 사안이 발생했다.
이번에는 이것에 대한 대처 방법에 대해 집필해 나가고 싶다.
덧붙여 이번 사용하고 있는 rails의 버젼은 6.0.2.2입니다.
결론
이 오류는 업로더의 filename 메소드가 제대로 작동하지 않을 때 발생하는 오류입니다.
filename 메소드가 제대로 작동하지 않는 이유는
· 파일이 올바르게 첨부되지 않았습니다.
·로드되지 않음
등을 들 수 있습니다.
대처방법으로는
filename 메소드의 내용 뒤에
if original_filename.present?
를 추가하여 파일의 존재를 확인할 수 있는 경우에만 file 메소드의 내용이 동작하도록 설정
일로 해결할 수있었습니다.
image_uploader.rbdef filename
super.chomp(File.extname(super)) + '.jpg' if original_filename.present?
end
작업 내용
현재 이하의 이미지와 같은 업로드 기능을 carrierwave+rails6로 구현하고 있다.
image1에만 이미지를 첨부하고 보내기 버튼을 누르면 다음 오류가 발생합니다.
TypeError (no implicit conversion of nil into String):
app/uploaders/image_uploader.rb:33:in `extname'
app/uploaders/image_uploader.rb:33:in `filename'
app/controllers/characters_controller.rb:30:in `block in create'
app/controllers/characters_controller.rb:29:in `create'
app/uploaders/image_uploader.rb:33:in extname'
app/uploaders/image_uploader.rb:33:in
filename'
에 문제가 발생하고 있는 것 같아서 확인해 본다.
image_uploader.rbdef filename
super.chomp(File.extname(super)) + '.jpg'
end
이 메소드는 gem carrierwave로 gem rmagick(이미지 사이즈를 변환하거나 이미지의 확장자를 가지런히 하기 위한 라이브러리)를 사용할 때에 필요한 메소드입니다.
공식 매뉴얼 → htps : // 기주 b. 이 m/카리에 r와ゔぇぇpぉ아데 r/카리에 r와ょぇ/bぉb/마s r/레아 D메. md
실은 이번에 구현한 image1~image4에는 공통의 업로더(image_uploader.rb)를 사용하도록 설정하고 있었다.
오류가 발생하면 image1에만 이미지를 찍었으므로,
나머지 image2 ~ image4는 이미지가 첨부되지 않았다는 인식이되어 filename 메소드가 제대로 작동하지 않기 때문에 오류가 발생했습니다.
라고 생각했다.
그래서 filename 메소드의 내용 뒤에 파일의 존재를 확인한다.
if original_filename.present?
를 추가했다.
image_uploader.rbdef filename
super.chomp(File.extname(super)) + '.jpg' if original_filename.present?
end
그 결과… 에러가 나오지 않게 되었습니다! !
Reference
이 문제에 관하여(carrierwave + rails6에서 TypeError (no implicit conversion of nil into String) 오류가 발생한 경우 해결 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hasegawa-naoto/items/895dc96bb5aed93d769a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이 오류는 업로더의 filename 메소드가 제대로 작동하지 않을 때 발생하는 오류입니다.
filename 메소드가 제대로 작동하지 않는 이유는
· 파일이 올바르게 첨부되지 않았습니다.
·로드되지 않음
등을 들 수 있습니다.
대처방법으로는
filename 메소드의 내용 뒤에
if original_filename.present?
를 추가하여 파일의 존재를 확인할 수 있는 경우에만 file 메소드의 내용이 동작하도록 설정
일로 해결할 수있었습니다.
image_uploader.rb
def filename
super.chomp(File.extname(super)) + '.jpg' if original_filename.present?
end
작업 내용
현재 이하의 이미지와 같은 업로드 기능을 carrierwave+rails6로 구현하고 있다.
image1에만 이미지를 첨부하고 보내기 버튼을 누르면 다음 오류가 발생합니다.
TypeError (no implicit conversion of nil into String):
app/uploaders/image_uploader.rb:33:in `extname'
app/uploaders/image_uploader.rb:33:in `filename'
app/controllers/characters_controller.rb:30:in `block in create'
app/controllers/characters_controller.rb:29:in `create'
app/uploaders/image_uploader.rb:33:in extname'
app/uploaders/image_uploader.rb:33:in
filename'
에 문제가 발생하고 있는 것 같아서 확인해 본다.
image_uploader.rbdef filename
super.chomp(File.extname(super)) + '.jpg'
end
이 메소드는 gem carrierwave로 gem rmagick(이미지 사이즈를 변환하거나 이미지의 확장자를 가지런히 하기 위한 라이브러리)를 사용할 때에 필요한 메소드입니다.
공식 매뉴얼 → htps : // 기주 b. 이 m/카리에 r와ゔぇぇpぉ아데 r/카리에 r와ょぇ/bぉb/마s r/레아 D메. md
실은 이번에 구현한 image1~image4에는 공통의 업로더(image_uploader.rb)를 사용하도록 설정하고 있었다.
오류가 발생하면 image1에만 이미지를 찍었으므로,
나머지 image2 ~ image4는 이미지가 첨부되지 않았다는 인식이되어 filename 메소드가 제대로 작동하지 않기 때문에 오류가 발생했습니다.
라고 생각했다.
그래서 filename 메소드의 내용 뒤에 파일의 존재를 확인한다.
if original_filename.present?
를 추가했다.
image_uploader.rbdef filename
super.chomp(File.extname(super)) + '.jpg' if original_filename.present?
end
그 결과… 에러가 나오지 않게 되었습니다! !
Reference
이 문제에 관하여(carrierwave + rails6에서 TypeError (no implicit conversion of nil into String) 오류가 발생한 경우 해결 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hasegawa-naoto/items/895dc96bb5aed93d769a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
TypeError (no implicit conversion of nil into String):
app/uploaders/image_uploader.rb:33:in `extname'
app/uploaders/image_uploader.rb:33:in `filename'
app/controllers/characters_controller.rb:30:in `block in create'
app/controllers/characters_controller.rb:29:in `create'
app/uploaders/image_uploader.rb:33:in
def filename
super.chomp(File.extname(super)) + '.jpg'
end
def filename
super.chomp(File.extname(super)) + '.jpg' if original_filename.present?
end
Reference
이 문제에 관하여(carrierwave + rails6에서 TypeError (no implicit conversion of nil into String) 오류가 발생한 경우 해결 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hasegawa-naoto/items/895dc96bb5aed93d769a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)