캐리어웨이브를 사용하여 그림을 저장할 때 이름에 id를 사용하지 않는 게 좋을 것 같아요.
5909 단어 Rails
이 기사로 쓰겠습니다.
carrierwave의 이미지 업로드 기능에 저장된 디렉터리, 파일 이름과 연결된 모델의 id를 사용할 때 발생하는 난이도
결론
모든 모델의 주요 열쇠인 id는 임의의 rails로 만든 열로 특별한 의미를 가진다. 만약에 이번에 이미지와 관련된 용도에 좋지 않다면.
유일한 이름을 지으려면 SecureRandom 제작
image_path_code
등 열을 사용하고 저장 후 중복 파일 이름을 사용하지 않는다.혹은 자주 만들지 않으면 타임스탬프를 사용하는 방법도 있다.일어난 일
csv를 통일하여 아래 모델의 데이터를 대량으로 제작하는 기능이 필요하다.
app/model/animal.rb
class Animal < ApplicationRecord
mount_uploader :animal_icon, AnimalIconUploader
end
app/uploaders/animal_icon_uploader.rbclass AnimalIconUploader < ApplicationUploader
def store_dir
"uploads/images"
end
def extension_whitelist
%w(jpg jpeg png gif)
end
def filename
"animal_img_#{model.id}#{File.extname(original_filename)}" if original_filename.present?
end
end
csv 제작 데이터 준비이번에
animals#index
에 대량 등록된 인터페이스를 추가할 것이다.routing
config/routes.rb
中略
post :animal_bulk_imports, to: 'animals#bulk_import', as: :animal_bulk_imports
中略
view
다음 내용 추가
app/views/animals/index.html.haml
中略
%section
.title
csvから一括で登録する
= form_tag animal_bulk_imports_path, multipart: true do
%p
動物たちのcsvファイル
= file_field_tag :animal_csv
= submit_tag 'インポート', class: 'btn btn-default'
中略
controller
app/controllers/animals_controller.rb
class AnimalController < ApplicationController
中略
def bulk_import
Animal.bulk_import(params[:animal_csv]) if params[:animal_csv]
redirect_to animals_path, notice: 'csvによる登録を受け付けました'
end
private
def animal_bulk_import_params
params.require(:bulk_import_animal).permit(:animal_csv)
end
中略
end
만약 csv를 통해 그림을 설정하고 저장한다면, 예를 들어animal = Animal.new
# row['animal_icon_url'] には参照可能なurlが記載されているとする
animal.remote_animal_icon_url = row['animal_icon_url']
animal.save
이미지에 model.id
를 사용했기 때문에 제대로 저장할 수 없고 이미지를 등록할 수 없습니다.이런 일이 일어나다.
이렇게 되면 어떻게 해야 좋은 방법인지 모르겠어요...
기존 데이터를 새로운 참조 목표로 바꾸는 임무를 쓰고 기존 데이터를 옮기면 대응할 수 있습니까?
적어도 앞으로 제작될 응용 프로그램에서 우리는 이미지 경로에 대해 참고하지 않는 것이 가장 좋다는 것을 배웠다
model.id
.
Reference
이 문제에 관하여(캐리어웨이브를 사용하여 그림을 저장할 때 이름에 id를 사용하지 않는 게 좋을 것 같아요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/xxl/items/2c3c56d4f8647b4a86fb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)