【发布时间】:2019-02-03 03:41:47
【问题描述】:
我有一个预订,当您进行预订时,它会自动将您的预订状态保存为“等待主机验证”。当您接受预订时,预订状态更改为已确认(工作正常),当您拒绝时,应将状态更新为已取消。当您单击状态为“已取消”的“拒绝”时,它会回滚,更新不起作用。
这是我的链接代码,索引页:
<li><%= link_to "Accept", my_booking_path(booking, booking: {status: "Confirmed"}), method: :patch, class: "btn btn-success" %></li>
<li><%= link_to "Decline", my_booking_path(booking, booking: {status: "Cancelled"}), method: :patch, class: "btn btn-danger" %></li>
我的模型是:
class Booking < ApplicationRecord
belongs_to :user
belongs_to :bed
has_one :review, dependent: :destroy
validates :checkin_on, presence: true
validates :checkout_on, presence: true
validates :status, inclusion: { in: ["Pending guest request", "Pending host validation", "Confirmed", "Cancelled"], allow_nil: true }
end
我在 Bookings Controller 上的更新操作:
def update
set_booking
@booking.update(set_params)
redirect_to my_bookings_path
end
参数是:
def set_params
params.require(:booking).permit(:status)
end
我怎样才能实现它以使其停止回滚?任何帮助或见解将不胜感激。谢谢!
【问题讨论】:
-
嘿,你也可以分享验证错误吗?
-
你是什么意思:“当你点击状态为“已取消”的“拒绝”时,它会回滚,更新不起作用。“你说它回滚,但是说更新不起作用。当您希望按下“拒绝”按钮时,您希望将状态更改回“已取消”?
-
暂时将您的代码更改为使用
update!,然后验证错误将显示为异常,您可以轻松修复它们。 -
@BKSpureon 更新仅在单击接受预订时有效,当您拒绝时回滚。
-
@LindaKadz 不幸的是,我现在没有立即答复。最好的办法是使用带有模型规范的测试套件来复制它。学习它确实需要 20-30 分钟,但我认为从长远来看它会带来丰厚的回报。
标签: ruby-on-rails ruby