为什么验证错误只在奇数尝试时显示?

Why are validation errors only shown on odd attempts?

提问人:Santiago Cueva 提问时间:11/9/2023 最后编辑:3limin4t0rSantiago Cueva 更新时间:11/9/2023 访问量:38

问:

我有这个视图html.erb

<h1>Edit</h1>

<%= render "form", appointment: @appointment, from: @source %>

<div>
  <% if params[:source] == "confirmed" %>
    <%= link_to "Volver atras", confirmed_path %>
  <% elsif params[:source] == "request" %>
    <%= link_to "Volver atras", requests_path %>
  <% elsif params[:source] == "user" %>
    <%= link_to "Volver atras", @appointment %> |
  <% end %>  
</div>

形式是:

<%= form_with(model: appointment) do |form| %>
  <% if appointment.errors.any? %>
    <div style="color: red">
      <h2> Tu turno tiene <%= appointment.errors.count %> error/es:</h2>

      <ul>
        <% appointment.errors.each do |error| %>
          <li><%= error.full_message.split(" ")[1..].join(" ") %></li>
        <% end %>
      </ul>
    </div>
  <% end %>

  <div>
    <%= form.label :time, style: "display: block" %>
    <%= form.datetime_field :time%>
  </div>

  <div>
    <%= form.hidden_field :source, value: @from %>
    <%= form.submit %>
  </div>
<% end %>

还有我的预约控制员:

def update
    respond_to do |format|
      ant= @appointment.state

      if params[:appointment][:source] == "request" 
        @appointment.state= 3

        if @appointment.update(appointment_params)
          format.html { redirect_to requests_path, notice: "Turno actualizado, espere la confirmación." }
          format.json { render :show, status: :ok, location: @appointment }
        else
          @appointment.state= ant 
          format.html { render :edit, status: :unprocessable_entity }
          format.json { render json: @appointment.errors, status: :unprocessable_entity }
        end
    end
end

因此,当我在视图中并且选择无效时间时,我收到一个警告我的错误,问题是我第二次犯错误时,我没有收到警告,并且时间字段被重置为我之前的时间字段(它不会第一次发生,即使屏幕上出现错误,它仍然存在)。第三次有效,但第四次同样的事情再次发生

我不知道该怎么做,我是 ruby on rails 的新手

Ruby-on-Rails 红宝石

评论

0赞 3limin4t0r 11/9/2023
你能添加你得到的确切警告吗?这是服务器或客户端错误/警告吗?- 对我来说突出的一件事是你通过了,但随后引用了。这应该是 ,没有 .但我不认为这是您问题的原因。from: @sourcevalue: @fromvalue: from@

答:

0赞 Thanh 11/9/2023 #1

我在编辑操作中设置了@source的值。

当更新失败时,它会呈现“编辑”视图,并且不会在编辑操作中执行代码

因此,您可能希望在提交表单并出现错误后为 @source 设置值:

else
          @appointment.state= ant 

          # set value for @source here, ex:
          @source = params[:appointment][:source]

          format.html { render :edit, status: :unprocessable_entity }
          format.json { render json: @appointment.errors, status: :unprocessable_entity }
        end