1

如何使用 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 工作正常,新包会自动添加到页面上。如果包无法保存,我如何显示错误(或任何内容)?

4

2 回答 2

1

这是一个让您入门的简单方法:

在表单的查看页面上:

<% 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
于 2018-06-27T16:05:51.873 回答
-1

如果你想检查任何错误 ruby​​ 提供一个非常简单的方法来做到这一点

@incoming_packages.errors.full_messages将显示与您的模型相关的所有错误。您也可以与所有这些错误进行交互

`<%if @incoming_packages.errors.any?%>
  <% @incoming_packages.errors.full_messages.each do |message| %>
    <%= message %>
  <%end%>
<%end%>`
于 2018-06-27T20:20:02.293 回答