所以我在预留模型中有一个名为add_equip的方法。此方法会进行一些检查以确保添加的设备有效(与另一个预留不冲突)。Rails - 从非验证错误的模型中获取错误消息
检查工作。如果不应该添加一件设备,那么它不是,如果应该的话。
问题是我无法弄清楚如何将消息发送回控制器放在闪存消息中?我知道我必须在这里丢失一些东西,但我现在已经搜索了几个小时,并且无法真正找到任何明确的解释,说明如何将错误传递回控制器,除非它们是验证错误。
add_equip在reservations_controller
def add_equip
@reservation = Reservation.find(params[:id])
@addedEquip = Equip.find(params[:equip_id])
respond_to do |format|
if @reservation.add_equip(@addedEquip)
flash[:notice] = "Equipment was added"
format.html { redirect_to(edit_reservation_path(@reservation)) }
else
flash[:notice] = @reservation.errors
format.html { redirect_to(edit_reservation_path(@reservation)) }
end
end
end
add_equip在预订模式
def add_equip equip
if self.reserved.find_by_equip_id(equip.id)
self.errors.add_to_base("Equipment Already Added")
return false
elsif !equip.is_available?(self.start, self.end)
self.errors.add_to_base("Equipment Already Reserved")
return false
else
r = Reserved.new
r.reservation = self
r.equip = equip
r.save
end
end
任何帮助将不胜感激。我知道我在这里错过了一些基本的东西。
感谢加入“.full_messages。to_sentance“做了诡计,我知道我必须错过一些愚蠢的东西 – raytiley 2009-11-08 15:30:58
在flash中使用model.errors.full_messages是恕我直言,这是一种很好的解决方法。'error_messages_for:model'是显示错误消息的常规方法,如你指出的,解决这个问题的正确方法是把equip_id上的错误代替base,然后渲染编辑表单动作,不需要重定向 – 2009-11-08 16:42:03
这是一个好处,重新渲染会更好 – 2009-11-08 18:42:49