работа с пультом: правда - PullRequest
0 голосов
/ 01 июня 2018

У меня есть модальное окно, о котором вам нужно сообщить об ошибке. Итак, у меня есть HTML-код с этим окном

<div class="modal">
    <div id="modal-6">
    <%#= render @p::ErrorReport %>
        <div class="box_m box_m_middle" style="margin: 0 auto;">
                <div class="report_error">
                    <div class="name">Report an error</div>
                    <div class="arcticmodal-close close"></div>
                    <p class="info_block">Some info block</p>
                    <div class="error_explanation">Email is wrong</div>
                    <div class="message_send">Message sent</div>
                    <p class="thanks">Thank you!</p>
                    <div class="form">
                        <%= form_for @image, url: error_create_url, method: :post, remote: true do |f| %>

                        <div class="row">
                            <div class="box1 blocks">
                                <%= f.label :name, class: "label" %>
                                <%= f.text_field :user, class:"int int2", placeholder: "" %>
                            </div><!--
                    /--><div class="box2 blocks">
                                <%= f.label :Email, class: "label" %>
                                <%= f.text_field :email, class:"int int2", placeholder: "" %>
                            </div>
                        </div>
                        <div class="row">
                            <%= f.label :Message, class: "label" %>
                            <%= f.text_area :message, class:"int int2", placeholder: "Please write about your problem" %>
                        </div>
                        <div class="rows">
                            <div class="box1 blocks">
                                <div class="file">
                                    <!-- <div>Attach file</div> -->
                                    <i class="i i_paper_clip"></i>
                                    <%= f.file_field :file , class: 'choose_file' %>
                                    <img id="error_report_image">
                                </div>
                            </div><!--
                    /--><div class="box2 blocks">
                                <%= f.submit "Send", class: 'btn btn_middle btn_radius5' %>
                                </div>
                            </div>
                        <% end %>
                    </div>
                </div>
        </div>
    </div>
</div>

У меня есть js-код, который обрабатывает Ajax из этого модального окна.Чтобы использовать Ajax, я использую remote: true.

function error_report_init(){

  var modal6 = $('#modal-6')
  var incorrect_mail = $('.error_explanation')
  error.click(function(){
    error_show()
  })
  $('body').on('ajax:success', function(data, status, xhr) {
    if (status == 'ok') {
      console.log('status: ', status)
      incorrect_mail.hide()
      modal6.find('.form').hide()
      modal6.find('.report_error .message_send').show()
      modal6.find('.report_error .thanks').show()
      modal6.find('.info_block').hide()
      modal6.find('.name').hide()
    } else {
      incorrect_mail.show()
    }
  })
  $('body').on('ajax:error', function(data, status, xhr) {

  })
}

И контроллер

class Desktop::Vision::ErrorController < CatalogController
  domain_layout 'page_screen'

  def form
    @image = Image.new
  end

  def create
    @image = Image.new(image_params)

      if @image.save
        ::Mailer::FromSite.error_report(@image).deliver_later
        # Mailer::FromSite.error_report_alias(@image).deliver_later
        render_status 'ok' 
      else
        render_status @image.errors.full_messages
      end
    end
  end

    def reported
    end

    private

    def image_params
        params.require(:image).permit(:user, :email, :message, :file)
    end

  def render_status status
    render plain: status
    return
  end
end

И проблема в том, что, если я пытаюсь заполнить поля, все идет хорошо, и я получаюдругое модальное окно с: «Сообщение отправлено». Но когда я пытаюсь прикрепить какой-то файл, все идет плохо, и удаленный: true работает очень странно. Потому что я получаю не модальное окно, и получаю только ответ контроллера на другой новой странице: «render_status'ok' "или" render_status @ image.errors.full_messages "(если адрес электронной почты неверен) и Ajax не работает.Я не знаю, почему Ajax не работает, когда я пытаюсь прикрепить файл

1 Ответ

0 голосов
/ 01 июня 2018

Чтобы использовать remote: true , создайте файл create.js.erb в соответствующей папке представления и переместите в него все функции обработки ajax.

Для этого вам не нужно render_status @image.errors.full_messages.

Вместо этого используйте в контроллере, как показано ниже:

respond_to do |format|
  format.html {  render_status 'ok' }
  format.js
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...