【问题标题】:Adding a conditional statement to a link向链接添加条件语句
【发布时间】: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


【解决方案1】:

在包含块之外尝试allow_nil,如:

validates :status, inclusion: { in: ["Pending guest request", "Pending      host validation", "Confirmed", "Cancelled"] }, allow_nil: true 

您也可以在上面提到的包含块之外使用allow_blank: true...

【讨论】:

  • @LindaKadz,如果答案有帮助,accept it,请
猜你喜欢
  • 2013-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多