2010-02-19 4 views
4

일반적으로 Rails에서 양식 헬퍼를 사용할 때 각 필드는 해당 객체의 메소드와 직접 상호 연관됩니다.존재하지 않는 메소드에서 Rails 양식 헬퍼 사용

그러나 양식 (사용자 가입)에는 사용자 모델 자체의 일부가 아닌 필드 (예 : 카드 세부 정보)를 포함해야하지만 표시해야합니다.

양식을 작성하여 필요한 필드를 얻고 사용자 모델을 지저분하게하지 않고 필요한대로 유효성을 검사하여 다른 모든 유효성 검사에 맞출 수있는 방법은 무엇입니까?

답변

3

사용자 모델을 "더러워"는 것이 확실하지 않지만 attr_accessor method을 사용하면됩니다. 이것은 당신이 검증에 사용할 수있는 모델에 대한 속성을 만들 수 있습니다 :

validates_length_of :confirmation_email, :within => 1..10, :if => Proc.new { |widget| widget.creation_step > 2 }

: 특정 시간에 유효성 검사를 실행하려면

class Widget < ActiveRecord::Base 
    attr_accessor :confirmation_email 
    validates_length_of :confirmation_email, :within => 1..10 
end 

을, 당신은 :if 조건을 사용할 수 있습니다 :if => :payment_complete과 같은 클래스 메소드를 사용할 수도 있습니다. 이러한 기능을 통해 원하는 기능을 구현할 수 있습니다. 내가 아는 한 더 이상 간결한 방법이 없습니다.

+0

필자는 본질적으로 문제의 모델과 직접적으로 관련이있는 양식을 작성하지 않습니다. 예를 들어 가입 양식에는 일부 사용자 속성이 포함될 수 있으며 일부 속성은 (예 : CC 게이트웨이에서 실행 된 다음 잊어 버릴 수도있는) '버려진'속성 일 수 있습니다. 사용자 모델에 특성을 만든 경우이 단일 위치에서이 항목의 유효성을 검증하려는 경우에만 유효성 검사를 위해 해당 속성을 제공해야합니다. –

+0

: if 조건에 대한 정보를 추가했습니다.이 정보는 찾고있는 것일 수 있습니다. –

1

예 후다 카츠 (Yehuda Katz)는 ActiveModel을 사용하여 Rails의 양식 도우미와 호환되는 임의의 클래스를 만드는 방법에 대해 great explaination을 가지고 있습니다. 레일즈 3을 사용하는 경우에만 작동합니다. 당신이 출혈 가장자리에 거주하지 않는 경우

, 이는 당신이 form_for 작동 충분한 같은 ActiveRecord::Base를 꽥꽥 클래스를 만드는 방법에 대해 설명, Railscasts episode 193, "Tableless Model"보세요.

관련 문제