Модальная валидация клиентской части Rails - PullRequest
1 голос
/ 08 марта 2019

У меня есть модальный бутстрап с ajax:

 <%= link_to 'Question', new_question_path, remote: true, class: 'btn btn-info' %>

_form_modal.html.erb

<div class="modal fade" id="form_modal" tabindex='-1'>
  <%= simple_form_for @question, remote: true, validate: true do |f| %>
    <div class="modal-dialog">
      <div class="modal-content">
        <div class="modal-header">
          <h4 class="modal-title">Question</h4>
          <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
        </div>
        <div class="modal-body">
          <div class="form-inputs">
            <%= f.input :content, label: false %>
          </div>
        </div>
        <div class="modal-footer">
          <%= f.button :submit, "Ask", class:" btn btn-primary" %>
        </div>
      </div>
    </div>
  <% end %>
</div>

new.js.erb

 $('#remotecontainer').html('<%= j render "questions/form_modal", locals: { product: @product } %>');
 $('#form_modal').on('shown.bs.modal', function() {
 $('form[data-validate]').enableClientSideValidations();
 }).modal();

Я получаю доступ к модалу через это: <div id='remotecontainer'></div>

Метод контроллера:

def new
  @question = Question.new
end


def create
  @question = Question.new(question_params)

  respond_to do |format|
    if @question.save
      format.html { redirect_to root_path, notice: "Question was successfully sent!" }
    else
      format.js { render 'new.js.erb'}
    end
  end
end

У меня есть проверка внутри модели: validates_length_of :content, maximum: 70

И я использую следующие два гема для ошибок валидации:

gem 'client_side_validations'
gem 'client_side_validations-simple_form'

Появляется модальный формат, и, если я отправляю форму длиной менее 70 символов, создаются вопросы. Но с другой стороны, если я набираю более 70 символов, появляется ошибка проверки, и происходит что-то странное ... Если я набираю и повторно отправляю форму, содержащую менее 70 символов, она продолжает выдавать ошибку проверки и не дает позвольте мне отправить форму. Я мог бы что-то упустить здесь ... Так что есть идеи, как это исправить?

Обновление

Хорошо, я попробовал это .... Я добавил восклицательный знак в метод создания контроллера: if @question.save! И я получаю ошибку проверки на консоли. Ошибка валидации вообще не отображается на модале. И затем, когда я пытаюсь отправить форму с меньшим количеством символов, чем 70, она проходит. Так что из моего понимания что-то не так с настройкой двух драгоценных камней. Кто-нибудь может помочь с этим?

(0.2ms)  ROLLBACK
  ↳ app/controllers/questions_controller.rb:14
Completed 422 Unprocessable Entity in 10ms (ActiveRecord: 1.6ms)

ActiveRecord::RecordInvalid (Validation failed: Content is too long (maximum is 70 characters)):

1 Ответ

0 голосов
/ 09 марта 2019

Мне нужно было поместить это в мой модал:

<div id="formModal">
    <%= render partial: 'layouts/messages' %>
 </div>

Это мой метод управления:

def create
  @question = Question.new(question_params)

  respond_to do |format|
    if @question.save
      flash.now[:success] = "Question was successfully sent!"
      format.js { render 'create.js.erb' }
    else
      flash.now[:alert] = "Something went wrong!"
      format.js { render 'create.js.erb' }
    end
  end
end

и это внутри create.js.erb

$("#formModal").html("<%= escape_javascript(render partial: 'layouts/messages') %>");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...