2014-10-03 4 views
1

하나의 필드가 기본 개체의 필드와 직접 관련이없는 레일 입력 양식이 있습니다. ActiveRecord 필드에 입력하기 전에 계산을해야합니다. 지금까지는 괜찮습니다. 저는 계산을 컨트롤러에 넣었습니다.폼에 레일 유효성 검사

내 문제는 계산이 실패 할 수 있으며이를 사용자에게보고하려는 것입니다. 나는 플래시 알림으로이를 수행하는 방법을 알고 있지만, 특정 양식 입력 필드에 오류를 연관시키지 않으며 레코드 유효성 검사에서 제공하는 오류와 일치하지 않습니다. 내가하고 싶은 것은 입력 필드가 실패한 양식과 그 이유입니다.

ActiveRecord 유효성 검사를 사용하는 모든 설명서는 있지만 너무 늦은 것입니다. ActiveRecord를 채울 데이터가 없기 때문에 ActiveRecord를 만들 수 없습니다. 유효하지 않은 더미 데이터로 채우는 경우에도 만들 수 없습니다. - 예! - 유효성 검사가 될 때까지 오류의 원인을 자세히 알지 못했습니다.)

컨트롤러에서 폼 유효성 검사 오류를 생성하는 레일즈의 방법은 무엇입니까 (ok, ok,하지만 나는 그것을 검증기로 바꾸기 전에 작동시키고 싶습니다). 아니면 내가 대신해야할까요?

편집 : 다음은 내가 수행하려고하는 것의 예입니다. 등록 번호 (번호판)로 식별되는 차량 수천 대를 다루는 차량 관리자를 상상해보십시오. 차량이 운전자에게 체크 아웃되면 수천 개의 항목이있는 드롭 다운 메뉴가 제공되지 않으므로 사용자는 등록 번호를 입력합니다. 컨트롤러가이를 확인 (또는 더 잘 모델을 검색하여 조회)하고 차량 기록과 일치 시키며 차량 기록 ID가 계산대에 입력됩니다. 사용자가 숫자를 잘못 입력하면 컨트롤러/모델 (아마)이 해당 차량에 대한 항목이 없음을 알 수 있습니다. 다른 유효성 검사 실패와 일치하는 방식으로 저장이 실패한 이유를 사용자에게 알려주고 싶습니다.

+3

당신은 가상 속성을 사용할 수 있습니다 체크 아웃 할 수 있습니다. 양식에 추가하고 유효성 확인을 – Mandeep

+0

@Mandeep이 올바른 생각을합니다. 이 논리는 실제로 컨트롤러에있는 것이 아니라 모델 자체에 있어야합니다. – engineersmnky

답변

2

내 문제는 계산이 실패 할 수 있으며이를 사용자에게보고하고 싶습니다.

가상 속성 :

가상 속성은 데이터베이스에 직접 매핑되지 않는 양식 필드를 추가 할 수있는 깨끗한 방법입니다 그리고 난 그것이 당신의 요구에 잘 맞는 것 같아요. 가상 속성을 만들려면 당신은 당신의 모델이 라인을 추가 할 수 있습니다 그 후

class ModelName < ActiveRecord::Base 
    attr_accessor :your_field 
end 

당신은 형식에서 필드를 추가하고 JS에 의해 계산을 수행 한 후이를 미리 기입 할 수 있습니다. 그런 다음 모델에 사용자 지정 유효성 검사를 추가하고 계산이 맞는지 여부를 확인하십시오..

class ModelName < ActiveRecord::Base 
    attr_accessor :your_field 

    validate :some_custom_validation_method 

    def some_custom_validation_method 
    # some logic 
    end 
end 

자세한 내용은이 railscast episode on virtual attributes

+0

나는 그렇게하는 것에 대해 궁금해했다. (구형) RailsCast처럼 js가 아닌 모델에서 계산을 수행 할 수 있습니까? 주로 내가 Ruby/Rails를 아는 것보다 훨씬 적은 j를 알고 있기 때문에, 필요한 모든 것들이 모델에서 쉽게 접근 할 수 있기 때문에. 하지만 전체를 원자 단위로 만들 필요가 있습니다. 계산에 다른 레코드의 조회가 필요하므로 원자를 만들지 않으면 형식을 검증하는 데 사용한 계산이 잘못 될 수있는 위험이 있습니다. 기록을 갱신하러 왔어. 또는 설정 도구에서 유효성 검사 오류를 직접 제기 할 수 있습니까? – digitig

+0

@digitig js에서 계산을 요청했는데 양식의 사용자 선택에 따라 채워야하기 때문입니다. 계산에 실패하면 사용자는 계산 된 필드를 사용자에게 표시하지 않는다고 상상해보십시오. 갑자기 사용자가 그 유효성 검사 오류를 받기 시작하고 그/그녀는 방금 일어난 일을 숙고 할 것입니다. – Mandeep

+0

도움을 주셔서 감사합니다. 그러나 js가 어디에 올지 확실하지 않습니다. 내가하려는 일의 예. – digitig