2013-09-03 3 views
0

일부 사용자 정의 유효성 검사를 실행하기 위해 제출 버튼 link_to를 만들 수있는 방법이 있습니까?제출 버튼을 누른 후 사용자 정의 유효성 확인

특정 필드의 존재 여부를 확인하는 유효성 검사를 작성하는 데 도움이 필요하며 또한 중첩 된 양식 배열에 4 개 이상의 항목이 있는지 확인해야합니다. Im은 중첩 된 서식과 프로젝트에 보석 고치를 사용하여 사용자가 신청서에 첨부 된 질문이 4 개 이상 있어야합니다.

class App < ActiveRecord::Base 
    belongs_to :user 
    has_many :questions, :dependent => :destroy 
end 


class Question < ActiveRecord::Base 
    belongs_to :app 
end 

다단 제어 : 사용자가 생성되면 다단계 질문 양식이 내장되어

class UserStepsController < ApplicationController 
    include Wicked::Wizard 

    steps :personal, :school, :grades, :extra_activity, :paragraph, :submit 

    def show 
    @user = User.find(current_user) 
     case step 
    when :school, :grades, :extra_activity, :paragraph, :submit 
    @question = Question.find(current_user) 
    end 
    render_wizard 
    end 

    def update 
    @user = User.find(current_user) 
    @user.update_attributes(user_params) 
    case step 
    when :school, :grades, :extra_activity, :paragraph, :submit 
    @question = Question.find(current_user) 
    @question.update_attributes(question_params) 
    end 

    render_wizard @user 
    end 

을 다음과 같이

내 단체입니다.

예를 들어 사악한 두 번째 페이지에서 고등학교 이름 validates :highschool, :presence => true의 존재를 확인하려고하지만 여전히 채점 된 고등학교없이 마지막 제출 페이지에서 양식을 제출할 수 있습니다.

해결책 :

내가 문자열입니다 "단계"라는 사용자의 마이그레이션을 만들었습니다.

그때 사용자 모델에 다음 코드를 추가합니다

하나의 다중 페이지 형태로 내 여러 모델을 회전 처리 내 user_steps 컨트롤러에서 다음
class App < ActiveRecord::Base 
    validate :minimum_number_of_questions_required, if: "step == 'extra_activity'" 

    private 

    def minimum_number_of_questions_required 
    if questions.count < 4 
     errors[:base] << "You must have at least 4 questions attached." 
    end 
    end 
end 

, 나는 내 업데이트 방법에 다음과 같은 추가 :

case step 
when :extra_activity 
    @user.step = step.to_s 
end 

영어로 볼 때, 레일스는 사용자가 양식의 어느 단계에 따라 사용자를 추적하는지 알 수 있습니다. 단계에 따라 양식 단계에 대한 유효성 검사를 실행할 수 있습니다.

이것은 extra_activity 단계에서 최소 4 개의 질문 만 필요하지만 유효성 검사가 허용하지 않기 때문에 이전 단계를 지나칠 수는 없다는 점에서 유용합니다. 우리는 같은 모델로 작업하고 있다는 것을 기억하십시오. 사용

보석 : (단순 중첩 된 형태의) 코쿤과 사악한 이러한 검증은 항상 적용해야하는 경우

+0

이러한 검증은 항상 시행되어야합니까? 아니면이 특정 양식이 제출되었을 때만입니까? –

+0

@ArtinBoghosian이 양식을 제출 한 후 – Dileet

답변

0

(단순 다단계 양식), 그리고 당신은 응용 프로그램이에 있어야합니다을 저장하려고 할 때마다 내 말은 그하여 최소 4 질문에 당신은과 같이 추가합니다 :

class App < ActiveRecord::Base 
    validate :minimum_number_of_questions_required 

    private 

    def minimum_number_of_questions_required 
    if questions.count < 4 
     errors[:base] << "You must have at least 4 questions attached." 
    end 
    end 
end 

을 당신은 단지 그 형태가 실제로 최소를 실행해야합니다 알고 개체를 할 수있는 응용 프로그램 클래스의 변수를 설정할 수 있습니다 제출 된 때 발생하고 싶었다면 질문 유효성 확인 :

class App < ActiveRecord::Base 
    attr_accessor :validate_questions 

    validate :minimum_number_of_questions_required, if: :validate_questions 

    # same code as above for validation 
end 

코드/양식이 validates_question 변수를 true로 평가되는 값으로 설정해야합니다. 나는이 방법의 큰 팬이 아니지만 빠르고 쉽습니다. 그 외에도 ActiveRecord 모델 앞에 앉아서 양식에 필요한 유효성 검사를 수행하는 일종의 Facade 객체 또는 양식 객체를 만들어야한다고 생각합니다.

class AppForm 
    include ActiveModel::Validation 

    # move validations code here 
end 
+0

웬일인지 그것이 나를 위해 일하지 않을 것이다. 보기가 내가 설정 한 다중 단계 컨트롤러에 연결되어있을 수 있습니까? – Dileet

+0

컨트롤러 코드를 게시하여 실제로 양식 데이터를 사용하는 방법에 대한 컨텍스트를 얻을 수 있습니까? –

+0

업데이트 된 질문 – Dileet

관련 문제