refile로 여러 개의 그림을 투고하고 싶습니다!
2667 단어 Rails
조사할 때 여러 개의 이미지 투고에서gem'carrierwave'를 사용했다는 보도가 많았지만 순조롭지 못해 이번에는 refile로 설치를 시도했다.
이미지 게시 테이블 만들기
이미지 투고만 하면 대상 모델에 이미지 열을 추가하면 되지만 여러 장이면 표를 따로 만들어야 한다.
나는pet_새 이미지 모델이 생성되었습니다.
create_table "pet_images", force: :cascade do |t|
t.integer "pet_id"
t.string "image_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["pet_id"], name: "index_pet_images_on_pet_id"
end
관계를 맺다
1:N의 관계성을 갖도록 합니다.
pet.rb
has_many :pet_images, dependent: :destroy
accepts_attachments_for :pet_images, attachment: :image
pet_image.rb belongs_to :pet
attachment :image
컨트롤러 편집
pet.controller.rb
private
def pet_params
params.require(:pet).permit(:name, :birthday, :gender, :introduction, :genre_id, :prefecture_id, :age, :is_active, :image, pet_images_images:[] )
end
새 게시물 양식 편집
pet.new.html
<%= form_with model: @pet, url: pets_path, method: :post, local: true do |f| %>
<%= f.attachment_field :pet_images_images, multiple: true %>
<% end %>
애완동물 일람에 이미지 한 장만 표시하고 싶어서 다음과 같이 기술합니다.
pet.index.html
<% pet.pet_images.first(1).each do |image| %>
<%= attachment_image_tag image, :image, size: '200x200' %>
<% end %>
여러 장의 그림을 표시하고 싶은 곳↓
pet.show.html
<script type="text/javascript" src="//cdn.jsdelivr.net/npm/[email protected]/slick/slick.min.js"></script>
<div id="slider">
<% @pet.pet_images.each do |image| %>
<%= attachment_image_tag image, :image, size: '350x350', class: "rounded mt-4" %>
<% end %>
</div>
슬라이드 쇼 포함
application.html
<head>
<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/[email protected]/slick/slick.css"/>
<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/[email protected]/slick/slick-theme.css"/>
</head>
application.js$(function() {
$('#slider').slick({
dots: true,
autoplay: true,
autoplaySpeed: 4000,
});
});
application.css.slick-next {
right: 10px
z-index: 100;
}
.slick-prev {
left: 10px
z-index: 100;
}
이상입니다!!
Reference
이 문제에 관하여(refile로 여러 개의 그림을 투고하고 싶습니다!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/corogit/items/3aeb3076115de2d26283텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)