왜 rails 프로그램에서 특정한 상황에서만 서버에 이미지 데이터를 전송할 수 없습니까
9362 단어 carrierwavemultipartRails
컨디션
rails 5.0.6
mysql
gem "carrierwave"
gem "minimagick"
accepts_nested_attributes_for 방법을 사용하여 과목 실례와 단어 모델 실례를 동시에 저장합니다
어떤 애플리케이션
단어장 응용 프로그램
영어라는 과목에 등록해 해당 과목과 관련된 단어(표와 리)를 동시에 등록하면 단어장처럼 뒤집을 수 있다.
어떻게 막았어?
특정한 상황에서만 file 표시가 지정한 이미지가parameter에 잘 들어가지 못합니다
발송 데이터 상황 일람
1.new 화면에서create(기본값은 5개text field)
1번과 2번의 경우.
모습보시다시피 왜 3번에만 이미지 파일이 이미지 파일에 없고 이미지 파일 이름에만 있는지
결론
그림과 소리 데이터 등을 보낼 때form 탭에multiprt를 붙여야 합니다: 정말 옵션을 사용하면 View에 표시할 수 있습니다
enctype="multipart/form-data"
의 속성으로 이미지 데이터를 매개 변수에 안전하게 저장할 수 있습니다.그다음에 form.for에서 멀티파트를 자동으로 선택할 수 있습니다: 정말입니다. 그러나 방금 세 번째 상황에서 화면을 형성하는View 파일의 코드에서 filefield 태그가 없습니다.(이 과목과 관련된 단어의 실례가 하나도 없기 때문에form for 탭 뒤에 쓴다
<%= f.fields_for :words, word do |s| %>
다음 코드에 따르지 않음,file필드 탭을 읽지 않았기 때문에)이렇게 되면 HTML에 파일 탭이 지정되지 않습니다,formfor의 측면에서 볼 때 이 사람은 이미지 데이터를 보내고 싶지 않다. multiper:true 옵션, 출력에 자동으로 주지 않는form 탭에 enctype="multiper/form-data"속성이 없고 이미지 파일의 이름만 보내는 특수한 상황이 발생했다.
다음은 View 코드입니다.
<div class="subject_new_display">
<%= form_for @subject, html: { multipart: true } do |f| %> //このmultipartをつけてやる事で解決
<div class="make-subject">
<% if @subject.title.nil? %>
<h2>新しい学習セットを作成する</h2>
<% end %>
<%= f.text_field :title %><br>
</div>
<div class="word_boxes" data-count="5">
<% @subject.words.each_with_index do |word, index| %>
<%= f.fields_for :words, word do |s| %>
<div class="word_set">
<span class="word_box__index">
<%= index + 1 %>
</span>
<div class="word_box__left">
<%= s.text_field :face, class: "word_box" %>
表
</div>
<div class="word_box__right">
<div class="word_box__right--content">
<%= s.text_field :flip, class: "word_box" %>
<label>
<i class="fa fa-picture-o" aria-hidden="true"></i>
<%= s.file_field :image, class: "image-picture" %>
</label>
</div>
裏
</div>
</div>
<% end %>
<% end %>
</div>
<div class="add_card">
<div class="add_card__wrapper">
<span>カードを追加</span>
</div>
</a>
<% if @subject.title.nil? %>
<%= f.submit "作成する", class: "button--create-subject"%>
<% else %>
<%= f.submit "編集する", class: "button--create-subject"%>
<% end %>
<% end %>
</div>
이상적 사고 회로
1.
컨트롤러로 binding하다.pry를 통해params를 보았을 때 이미지 열에 저장된 데이터가 이상하기 때문에 원인이 View측에 있다고 단정했습니다.
2
New 화면과 이미 단어 데이터가 포함된 Edit 화면을 포함할 때(처음에 단어 데이터가 있었지만 모두 삭제해 데이터가 하나도 없는 상태로 만든 다음 단어를 입력해 보낼 때) 이미지를 잘 보낼 수 있습니다.
이에 비해 단어 데이터가 처음부터 하나도 들어오지 않은 Edit 화면일 때 이미지 데이터의 이름만 보냅니다.
3
데이터를 정확하게 보내는 경우 화면이 처음부터 단어 데이터가 있을 때가 공통적이다.반대로 보내지 않았을 때 처음부터 View로 단어 데이터를 읽지 않았기 때문에 코드의 filefield가 반응이 없습니다. 나쁜 짓을 했을 수도 있습니다. 이미지 데이터를 보내는 데 필요한 설정의 속성을 기술하지 않았습니다.그래서 여러 가지 상황에서 폼 라벨의 속성이 다른지 검증 도구를 사용합니다.
4
이enctype="multipert/form-data"는 무엇입니까?
5
해결하다.
Reference
이 문제에 관하여(왜 rails 프로그램에서 특정한 상황에서만 서버에 이미지 데이터를 전송할 수 없습니까), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/NateRive/items/872129cab4504ddde899텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)