2010-01-14 4 views
1

보기에서 변수를 모델로 전달하여 뷰에서 전송할 필드의 유효성을 조건부로 확인하려고하므로 확인할 필드 집합을 알 수 있습니다.모델에서보기 및 인스턴스로 변수 선언하기

모델은 다음과 같습니다

validates_presence_of :first_name, :last_name, :if => :registration_step? 
    validates_numericality_of :primary_phone, :if => :contact_step? 

    def registration_step? 
    @step == :register 
    end 
    def contact_step? 
    @step == :contact 
    end 

나는 모든 것이 제대로 작동하기 위해서는 내보기에 배치해야 모르겠어요. 내가

<% @step = :register %>

을 시도했습니다
<% @step = :contact %> 

뿐만 아니라 다른 조합 (:. 단계, 또한 '등록'과 '접촉'로 @step 나는 그냥 문법의 문제 모르거나 모델에서 한 가지만 더 잃어 버렸지 만 알아낼 수는 없습니다. "

+0

'attr_accessor : step'을 내 모델에 추가하면 컨트롤러에 제대로 설정되어있는 것입니다. step ('register')은 나를 위해 오류를 던집니다. 그리고 @step = 'register'는 에러를 던지지 않지만, 'def registration_step? @step == : register end '모델에 있습니다. – Simon

+0

귀하의 의견에 답장하여 답변을 업데이트했습니다. 아래를 참조하십시오. – theIV

+0

정말 고마워요! 나는 당신의 솔루션을 작동시키지 만 나의 궁극적 인 문제는 해결하지 못할 것이다. 나는 다단계 입력 양식을 만들고 있는데, 각 후속 단계/페이지/양식은 데이터베이스의 레코드를 업데이트하고 컨트롤러에서 동일한 작성/편집 방법을 사용합니다. 유효성 검사를 조건부화해야하는 이유는 각보기에서 유효성을 검사 할 양식 필드가 몇 개 밖에 없기 때문입니다. 각 단계에서 표시되지 않는 모든 필드에 대한 유효성 검사가 실패하므로 유효성 검사를 조건부로 지정해야합니다. 솔루션은 작동하지만 폼을 저장할 때마다 동일한 create 메서드가 호출되기 때문에 step 특성을 다시 정의 할 수 없습니다. – Simon

답변

1

뷰에 인스턴스 변수를 설정해도 적어도 모델에는 적용되지 않습니다. 직접 설명한 문제는 아닙니다. - 조건부 - 우리가 지금 다루려고했던 것입니다.

당신의 가장 좋은 방법은 콘트롤러의 생성, 업데이트, 어떤 액션 으로든 설정할 수있는 모델에 attr_accessor을 가지고 있다고 생각합니다. 이것은 뷰에서 설정하면 안되는 것입니다. 모델에 일단 유효성 검사 조건으로 if의이 속성 값을 검사하는 방법을 사용할 수 있습니다. 확실히 양식에서 숨겨진 필드로 전달하지 마십시오. 당신은 잠재적으로 사용자가 조작 할 수있는 이런 종류의 것을 신뢰하고 싶지 않습니다. , 모델에서의 라인을 따라 뭔가를 당신이 컨트롤러에서, attr_accessorstep를 추가 할 경우

@my_model = MyModel.new(params[:model]) 
@my_model.step = :register 
if @my_model.save... 

같은 것을 할 수 있어야,

그리고 :

답글 댓글을

validates_presence_of :first_name, :last_name, :if => :registration_step? 
def registration_step? 
    step == :register 
end 
관련 문제