gpt4 book ai didi

jquery - Rails form_for 部分渲染验证失败和正确验证

转载 作者:太空宇宙 更新时间:2023-11-03 16:44:59 24 4
gpt4 key购买 nike

我在我的 View 中使用 form_for remote:true 并进行了一些验证,这会触发 JS 响应以将部分内容附加到 div:

index.html.erb

<%= bootstrap_form_for @reservation, html: { id: "createReservationForm", method: :post }, remote: true do |f| %>
<div id="error_div"></div>
<%= f.datetime_select :start_time, ampm: true, discard_minute: true, :minute_step => 60 %>
<%= f.select :party_size, (1..6).map { |i| [i,i] } %>
<%= f.text_field :name, required: true %>
<%= f.hidden_field :restaurant_id, value: @restaurant.id %>
<%= f.submit 'Create Reservation', id: "formSubmit" %>
<% end %>

reservations_controller.rb

def create
@reservation = Reservation.new(reservation_params)
@reservation.start_time = @reservation.start_time.beginning_of_hour
@reservation.end_time = @reservation.start_time + 1.hour

respond_to do |format|
if @reservation.save
format.html { render action: 'index' }
format.js { render action: 'create', status: :created, location: @reservation }
else
format.html { render action: 'index' }
format.js { render action: 'create', status: :unprocessable_entity, errors: @reservation.errors.full_messages }
end
end
end

预订.rb

  validates :start_time, presence: true
validates :name, presence: true
validates :party_size, presence: true
validate :not_past

def not_past
if start_time.past?
errors.add :start_time, "cannot be in past"
end
end

创建.js.erb

$("#createReservationForm").on("ajax:success", function(e, data, status, xhr) {
$("#error_div").html('');
$("#reservationList").prepend("<%= j render partial: 'reservation', locals: { reservation: @reservation } %>")
$("#createReservationForm")[0].reset();
return false;
}).on("ajax:error", function(e, xhr, status, error) {
$("#error_div").html("<%= j render partial: 'shared/error_messages', locals: { object: @reservation } %>")
return false;
});

我遇到的问题是,当我说提交未通过“not_past”验证的表单时,我收到了错误消息并且没有提交。然后,当我调整表单上的时间以使其通过“not_past”验证时,它会附加新的@reservation 以及之前提交的未通过验证的@reservation。有没有办法以某种方式“清除”前一个失败的版本,以便当用户调整表单上的时间以通过验证时,它只会附加该版本的版本?

我试过弄乱“return false;”,我试过在创建新 Controller 之前在 Controller 中将@reservation 设置为 nil,我也确实在 respond_to block 中放置了“@reservation”,它只给了我是正确的那个,所以我不确定错误的那个被关在哪里。

最佳答案

如果有人遇到同样的问题,我发现可以通过删除“ajax:success”和“ajax:error”代码来解决。我无法证明为什么它会阻止它正常工作,我只知道它能够修复它。

关于jquery - Rails form_for 部分渲染验证失败和正确验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35108237/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com