所以我在預留模型中有一個名爲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