왜 rails 프로그램에서 특정한 상황에서만 서버에 이미지 데이터를 전송할 수 없습니까

컨디션


rails 5.0.6
mysql
gem "carrierwave"
gem "minimagick"
accepts_nested_attributes_for 방법을 사용하여 과목 실례와 단어 모델 실례를 동시에 저장합니다

어떤 애플리케이션


단어장 응용 프로그램
영어라는 과목에 등록해 해당 과목과 관련된 단어(표와 리)를 동시에 등록하면 단어장처럼 뒤집을 수 있다.

어떻게 막았어?


특정한 상황에서만 file 표시가 지정한 이미지가parameter에 잘 들어가지 못합니다
발송 데이터 상황 일람
1.new 화면에서create(기본값은 5개text field)
  • 단어 데이터가 포함된 편집 화면에서 추가 카드
  • 한 단어도 없는 편집 화면에 추가 카드

  • 3판에서만 이미지 열의 매개 변수에 View가 설정한 이미지 파일의 이름만 포함됩니다

    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
    해결하다.

    좋은 웹페이지 즐겨찾기