2010-03-07 7 views
1

저는 몇 주 동안 해결책을 찾고있었습니다. 아직 실패했습니다 .. 나는 레일즈에서 루비를 사용하여 호출 된 프로 시저를 저장했습니다. 프로 시저를 저장하면 유효성 검사가 수행되고 raiserror를 사용하여 throw됩니다.루비 레일에 ms sql이 표시 한 오류 메시지가 표시됩니다.

ex.

데프 이 M.find_by_sql "EXEC spTestProc '2010년 3월 15일'를 시작 저장 레일 컨트롤러에 내 루비에서

를 ("STARTDATE가 종료 날짜보다 작아야합니다 ") RAISERROR, '2010년 3월 1일 ' " 구출 Exception => e render : js => alert (e.message); 끝

가 대신 내가 "STARTDATE가 종료 날짜보다 작아야합니다"오류 메시지가, 내가이 오류 메시지 "DBI :: DatabaseError의 가지고 : 37000 (50000) [Microsoft] [ODBC SQL Server 드라이버를] [SQL 서버] StartDate EndDate보다 작아야합니다. : Exec spTestProc '3/15/2010', '3/1/2010' "

내 저장된 proc에 의해 throw 된 오류 메시지를 표시해야하지만 일부 "DBI :: DatabaseError ... 등"과 같이 표시하고 싶지 않은 추가 메시지 내가 어떻게 할 수 있니?

감사합니다.

답변

0

정규식을 사용하여 원치 않는 텍스트를 제거하십시오.

e.message.gsub(/(^.*SQL Server\])|(: Exec spTestProc.*$)/i, '') 
# this will return StartDate must be less than EndDate.. 
+0

감사합니다. 나는 이것을 시도 할 것입니다. – Jett

+0

하지만 Exception 클래스에는 실제 오류가있는 함수가 내장되어 있지 않습니까? asp.net에서와 마찬가지로 실제 오류 메시지가 나타납니다. thanks – Jett

+0

ASP.net이이 단계를 수행하고있을 가능성이 큽니다. –