복붙노트

[RUBY-ON-RAILS] 유효성 수용은 항상 실패

RUBY-ON-RAILS

유효성 수용은 항상 실패

나는 내가 부족 무엇을 볼 수는 없지만, 뭔가 분명 옳지 않다.

모델에서 :

validates :terms, :acceptance => true, :on => :update

몇 가지 옵션을 시도 :

>> a = Factory(:blog_agreement)
=> #<BlogAgreement id: 54, terms: false, created_at: "2011-01-20 11:33:03", updated_at: "2011-01-20 11:33:03", accept_code: "fa27698206bb15a6fba41857f12841c363c0e291", user_id: 874>

>> a.terms
=> false

>> a.terms = true
=> true
>> a.save
=> false

>> a.terms = "1"
=> "1"
>> a.save
=> false

>> a.terms = 1
=> 1
>> a.save
=> false
>> a.errors.full_messages
=> ["Terms must be accepted"]

해결법

  1. ==============================

    1.그래서 문제가 테이블의 실제 항목 같은 용어를 갖는 것을 밝혀. 일반적 validates_acceptance_of에서는 그 검증의 속성 접근과 사용을 정의하는 경우에 이러한 열없이 사용된다.

    그래서 문제가 테이블의 실제 항목 같은 용어를 갖는 것을 밝혀. 일반적 validates_acceptance_of에서는 그 검증의 속성 접근과 사용을 정의하는 경우에 이러한 열없이 사용된다.

    같은 옵션을 수락 : 작업에 validates_acceptance_of 위해서는이 통과 할 필요가 실제 테이블 컬럼에 매핑 할 때 :

    validates :terms, :acceptance => {:accept => true}
    

    그 이유는 액티브 레코드에서 타입 캐스팅과 관련이있다. 명명 된 속성이 실제로 존재하는 경우, AR의 수행은 데이터베이스 열 유형에 따라 타입 캐스팅. 대부분의 경우 수용 열은 부울로 정의 model_object.terms이 true 또는 false를 돌려줍니다 그렇게 될 것입니다.

    때 이러한 열 attr_accessor가 없습니다 : 용어는 단순히 일반적으로 체크 박스 필드에서 "1"이 될 것입니다 PARAMS 해시에서 모델 객체에 전달 된 값을 반환합니다.

  2. ==============================

    2.사람의 경우는 유증과 나 같은 동일한 문제를 가지고, 나는이 대답을 추가 :

    사람의 경우는 유증과 나 같은 동일한 문제를 가지고, 나는이 대답을 추가 :

    나는 고안의 등록 양식에 추가 :

    sign_up.html.erb

    <%= f.check_box :terms_of_service %>
    

    user.rb

    validates, :terms_of_service, acceptance: true
    

    내 configured_permitted_parameters 내부 TERMS_OF_SERVICE 및 유증 체크 박스 상태를 무시 : 내가 추가하는 것을 잊었다.

    application_controller.rb

    before_filter :configure_permitted_parameters, if: :devise_controller?
    
    def configure_permitted_parameters
      devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, :password_confirmation, :terms_of_service)}
    end
    

    configure_permitted_parameters 방법은 그가 이메일과 비밀번호의 추가 저장해야 PARAMS 무엇인지에 대한 유증에 의해 사용된다.

  3. ==============================

    3.나는이 형식을 사용했다 :

    나는이 형식을 사용했다 :

    validates :accpeted_terms, :acceptance => {:accept => true}
    
  4. ==============================

    4.

    validates_acceptance_of :terms, :accept => true
    
  5. ==============================

    5.나는 유효성에 대한 수용 위의 Candland의 대답은 레일 3.1 올바른 것으로 판명. 이것은 내가 데이터베이스에 대한 승인을 기록하는 내 레일 3.1.3 응용 프로그램을 설정하는 방법입니다.

    나는 유효성에 대한 수용 위의 Candland의 대답은 레일 3.1 올바른 것으로 판명. 이것은 내가 데이터베이스에 대한 승인을 기록하는 내 레일 3.1.3 응용 프로그램을 설정하는 방법입니다.

    마이그레이션에서,

    class AddTermsToAccount < ActiveRecord::Migration
      def change
        add_column :accounts, :terms_of_service, :boolean, :default => false
      end
    end
    

    이 모델에서,

    attr_accessible :terms_of_service
    validates :terms_of_service, :acceptance => {:accept => true}
    

    의 형태의,

    <%= f.check_box :terms_of_service %>
    <%= f.label :terms_of_service %>
    
  6. ==============================

    6.나는 각도 JS에서이 시도하고 진정한 가치 만 레일 4. 각도 전송 매개 변수가 true 인식하지 않았다 레일있다.

    나는 각도 JS에서이 시도하고 진정한 가치 만 레일 4. 각도 전송 매개 변수가 true 인식하지 않았다 레일있다.

    그래서, 나는이로 변경 :

    class Person < ActiveRecord::Base
      validates :terms_of_service, acceptance: { accept: true }
    end
    

    당신이있는 경우 기본 매개 변수가 1 또는 0에 한번이 작업을 수행 할 수 있습니다 :

    class Person < ActiveRecord::Base
      validates :terms_of_service, acceptance: true
    end
    

    이것은 더 문서입니다. 합격 확인. 나는이 도움을 바랍니다.

  7. ==============================

    7.유효성 검사가 아니라 의도 된 실패 귀하의 후속 호출이 실제로 업데이트에 저장할 수 있도록 공장에 대한 호출은 레코드를 작성합니다. 공장없이 그것을 시도하고 그것을 작동합니다.

    유효성 검사가 아니라 의도 된 실패 귀하의 후속 호출이 실제로 업데이트에 저장할 수 있도록 공장에 대한 호출은 레코드를 작성합니다. 공장없이 그것을 시도하고 그것을 작동합니다.

  8. ==============================

    8.당신은 당신의보기에서 기본 체크 박스, 등이있는 경우

    당신은 당신의보기에서 기본 체크 박스, 등이있는 경우

    <%= builder.check_box :agreement %>
    

    당신의 모델이 줄을 넣어

    validates :agreement, :acceptance => true
    

    이는이 CHECK_BOX보기 도우미에 의해 생성 된 기본 "1"을 사용

  9. from https://stackoverflow.com/questions/4746710/validates-acceptance-always-failing by cc-by-sa and MIT license