2013-02-16 2 views
1

모델이 있는데 이것을 Book이라고합시다. 난간에 책이 저장 될 때 ISBN 번호의 고유성을 확인합니다. 제 프론트 엔드에는 새로운 책을 추가 할 수있는 SpineJS 앱이 있습니다.SpineJS 서버 측 레일 모델 유효성 확인

class App.Book extends Spine.Model 
    @configure 'Book', 'name', 'isbn' 
    @extend Spine.Model.Ajax 

    validate: -> 
    "Name required" unless @name 
    "ISBN required" unless @isbn 

그리고 레일에 : SpineJS에서

class Book < ActiveRecord::Base 
    attr_accessible :name, :isbn 
    validates :name, :presence => true 
    validates :isbn. :presence => true, :uniqueness => true 
end 

내 문제는 내 SpineJS 응용 프로그램에서, 그것은 행복하게 중복 ISBN 번호가있는 새 책을 절약 할 수 있다는 것입니다, 비록 레일 서버가 유효성 검증 오류를 리턴합니다.

저장할 때 클라이언트 측에서이 오류를 처리 할 수있는 방법이 있습니까?

답변

1

척추의 매뉴얼 주장 : 유효성 검사가 서버 측을하지 않는 경우

, 그것은 클라이언트 측 유효성 검사 로직이 아닌 사용자 입력에 오류입니다.

고유성 요구 사항이 어떻게 적용되는지 쉽게 알 수 없습니다. 유효성 검사에 영향을 줄 수있는 모든 데이터베이스 데이터를 클라이언트 측 으로로드 할 수있는 경우 모든 멀티 사용자 경쟁 조건을 피할 수 있다면 일 수 있습니다.

"ajaxError"잡기가 매뉴얼의 권장 사항에 어긋나더라도 "ajaxError"이벤트를 catch하고 다시 시도하도록 사용자에게 알릴 수 있습니다. IIRC에서는 Spine이 실제로 새 레코드가 생성되지 않았 음을 확신시키기 위해 개체 ID를 사용하여 저글링을해야 할 수도 있습니다.

또한 사용자가 데이터를 편집하면서 선점 확인 요청을 실행할 수 있지만 이는 사용자의 편의를위한 것입니다. 이론적으로는 사용자가 저장하기 전에 충돌하는 레코드를 다른 사람이 생성하는 경쟁 조건에 여전히 도달 할 수 있습니다.

개인적으로 Spine의 오류 처리가 너무 무서운 태도를 보인 이후 Backbone으로 전환했습니다.

+0

척추의 단순함이 나에게 호소했기 때문에 나는 백본에서왔다. 그러나 지금 나는 거대한 웹 앱 척추가 조금 너무 얇은 것처럼 보인다. –