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.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.rb
def 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.rb
def filename
  super.chomp(File.extname(super)) + '.jpg' if original_filename.present?
end

그 결과… 에러가 나오지 않게 되었습니다! !

좋은 웹페이지 즐겨찾기