문제

나는 많은 분야와 매우 복잡한 모델을 가지고 있습니다. has_many 협회, 이미지가 추가되었습니다 image_column 등...

새 개체는 멀티 페이지 양식 (8 단계)으로 추가됩니다. 해당 단계 간의 검증 및 전파를 어떻게 수행해야합니까?

제 생각에는 validation_group 각 단계에 대한 검증을 정의하는 데 유용 할 수 있습니다. 전체 설계는 어떻습니까?

도움이 되었습니까?

해결책

전반적인 디자인의 경우 발표자 계층의 개념을 살펴볼 수 있습니다 (Jay Fields는 그의 블로그 항목에서이를 정의합니다. 레일 : 발표자 패턴) 복잡한/다중 모델을 다룰 때 컨트롤러를 얇게 유지하고 멍청한 모습을 유지하는 방법으로.

다른 팁

일련의 방법을 가질 수 있습니다 step_1, step_2, 각각 하나는 이전 단계의 필요한 데이터가 제출되었는지 확인합니다. 예를 들어, 3 단계에서 수집되고 구문 분석 된 모든 데이터에 여전히 액세스 할 수 있도록 세션에 데이터를 저장할 수 있습니다. 마지막 단계에서 세션에 저장된 모든 데이터와 데이터를 넣을 수 있습니다. 두 번째 단계에서 사용하는 단계에서 데이터베이스 또는 데이터를 수집하는 모든 것에 새 행을 만듭니다. 사용자가 단계를 엉망으로 만들면 이전 단계로 리디렉션하고 작성한 데이터로 양식을 작성하십시오. 예 : 사용자가 2 단계를 엉망으로 만들고 3 단계로 이어지는 양식을 제출하면 문제를 해결하십시오. step_3 방법, 사용자를 step_2 방법, 2 단계의 양식 요소가 미리 채워 졌는지 확인하십시오.

갈 때 세션에 데이터를 저장하지 않으려면 사용자가 1 단계를 제출 한 후 새 데이터베이스 행을 생성하고 각 연속 단계에서 새 데이터를 수집 할 때 해당 행의 필드를 업데이트 할 수 있습니다. 행에 '완료'에 대한 플래그가있을 수 있으며, 처음에는 0으로 설정 한 다음 사용자가 모든 단계를 성공적으로 완료 한 후 1로 설정할 수 있습니다.

또한 사용자가 이전 단계로 이동하도록 허용 할 수도 있습니다 (예 : 사용자가 5 단계에있을 때 3 단계로 돌아갈 수 있습니다).

첫 번째 단계에 필드 '이름'과 '이메일'이있는 양식이 있다고 가정 해 봅시다. 당신의 step_2 방법, 당신은 그것을 확인해야합니다 params[:name] 그리고 params[:email] 통과되었고 유효합니다. 세션이나 데이터베이스 행에 저장하지만 선택했지만 선택했습니다. 그런 다음 2 단계에는 필드 '나이'및 '성별'이있는 형태가 있습니다. 당신의 step_3 방법, 당신은 그것을 확인해야합니다 params[:age] 그리고 params[:gender] 통과하고 유효했으며 사용자가 3 단계에 직접 액세스하기 위해 URL에 입력하는 것을 방지하기 위해 사용자가 1 단계를 완료했는지 확인해야합니다. 등등.

class Campaign < ActiveRecord::Base
    with_options(:if => lambda { |campaign| campaign.on_or_past_step(:spam_can) }) do |spam_can|
      spam_can.validates_associated  :spam_can
      spam_can.validates_presence_of :spam_can
    end
  def on_or_past_step
   :
   :
  end
end

이것은 진행중인 작업이지만, 제가 올바른 길을 가고있는 것 같습니다. 사용 중입니다 AASM 실행할 유효성 검사를 결정하는 상태. 내 경우 문제의 모델이 자원이기 때문에 여전히 경로가 어떻게 작동하는지에 대해서는 아직 해결하지 못했습니다. 예를 들어, 어떤 분야의 편집 작업이어야합니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top