Rails form_with error (remote: true) - PullRequest
0 голосов
/ 27 июня 2018

Как я могу отображать ошибки, используя Rails form_with (удаленная форма с Ajax)?

У меня есть этот код:

def create
  @incoming_package = IncomingPackage.new(tracking: params[:tracking])
  if @incoming_package.save
    redirect_to admin_incoming_packages_path, notice: "created"
  else
    flash.now[:danger] = "error" # not displayed
  end
end

Вот моя форма:

<%= form_with url: admin_incoming_packages_path do |form| %>
  <%= form.text_field :tracking, required: true, autofocus: true, autocomplete: :off %>
  <%= form.submit "Add" %>
<% end %>

Если ошибок нет, rails-ujs + Turbolinks работает нормально и новый пакет автоматически добавляется на страницу. Как я могу отобразить ошибки (или что-то еще), если пакет не удалось сохранить?

Ответы [ 2 ]

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

Если вы хотите проверить ошибки, дайте очень простой способ сделать это.

@incoming_packages.errors.full_messages покажет все ошибки, связанные с вашей моделью. также вы можете взаимодействовать со всеми этими ошибками

`<%if @incoming_packages.errors.any?%>
  <% @incoming_packages.errors.full_messages.each do |message| %>
    <%= message %>
  <%end%>
<%end%>`
0 голосов
/ 27 июня 2018

Вот простой способ начать:

На странице просмотра формы:

<% if @incoming_package.errors.any? 
  <ul>
    <% @incoming_package.errors.each do |error| %>
      <li><%=error.full_messages%></li>
    <% end %>
  </ul>
<% end %>

Затем на вашем create действии выполните:

def create
  @incoming_package = IncomingPackage.new(tracking: params[:tracking])
  respond_to do |format|
    if @incoming_package.save
      flash[:success] = "The package was saved."
      format.html { redirect_to admin_incoming_packages_path, notice: "created" }
      format.json { render json: {success: true}
    else
      @errors = @incoming_package.errors.add(:base, "Some custom message here if you like")
      flash.now[:danger] = "error" # not displayed
      format.html { render 'new' }
      format.json { render json: @incoming_package.errors, status: :unprocessable_entity }
    end
  end
end

Вы также должны убедиться, что ваше действие new имеет:

@incoming_package = IncomingPackage.new
...