2017-03-01 2 views
0

이용 약관 집합을 수락해야하는 사용자 등록 양식을 만들려고 시도하고 있지만 체크 박스의 값을 사용하여 확인하는 방법을 모르겠습니다. 클릭 (서버 측).레일스 form_for 데이터베이스에 레코드가없는 체크 박스 유효성 확인

나는이 http://guides.rubyonrails.org/active_record_validations.html#acceptance을 사용하려했지만 지금까지는 아무 것도 얻지 못했습니다.

내 User.rb에 validates :terms_of_service, acceptance: { accept: '1' }이 있고 내 양식이 <%= f.check_box :terms_of_service,:value =>'0',:class =>"hidden", :id =>"t_and_c" %>이지만 클릭하지 않고 양식을 제출할 수 있습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 질문을 이해하기 쉽게하기 위해 다른 것을 게시해야한다면 알려주십시오.

답변

0

양식에서 클릭 할 때 확인란이 true를 반환해야합니다. 체크 박스를 체크하거나하지 않은 경우

양식에서 당신은 단지 지정

컨트롤러 방금 형태에서 반환되는 것을 저장에서
<%= f.check_box :terms_of_service %> Accept Terms of Services 
check_box(object_name, method, options = {}, checked_value = "1", unchecked_value = "0") 

: 당신 마이그레이션에서

#you whitelist the parameter together with all the other params you have 
def user_params 
    params.require(:user).permit(:terms_of_services) 
end 

#You create your user as usual 
def create 
    @user = User.new(user_params) 
end 

좀 더 명확하게하기 위해 terms_of_services에 대한 기본 옵션을 추가합니다.

class AddTermsOfServicesToUser < ActiveRecord::Migration 
    def change 
    add_column :users, :terms_of_services, :boolean, default: false 
    end 
end 

편집

당신이 당신의 사용자 모델의 열을 생성하지 않는 경우, 서버 측 서비스의 측면에서 작동 할 수있는 방법이 없습니다. 열을 만들지 않고 원하는 경우에만 클라이언트 측에서 terms_of_servies로 작업 할 수 있습니다.

<input type="checkbox" id="cbox1" value="accepted" onchange='enableSubmitTag(this)'> 
    <label for="cbox1">Accept Terms of Services</label> 

안 (당신이 데이터베이스에는 열이 없기 때문에 당신이없는 객체를 필요로하기 때문에)

는 레일 CHECK_BOX 도우미없이 체크 박스를 만들기 : 이것은 당신이 그렇게 할 수있는 방법입니다 기본적으로 제출 버튼

<%= f.submit "Create", class: "btn btn-primary", id: "submit_button", disabled: true%> 

서비스 약관 확인란을 클릭하면 제출 버튼을 다시 활성화하십시오.

function enableSubmitTag(element) { 
    if(element.checked){ 
    document.getElementById('submit_button').disabled = false; 
    } else { 
    document.getElementById('submit_button').disabled = true; 
    }; 
}; 

테이블에 terms_of_services를 저장하면 서버 측에서도 유효성을 검사 할 수 있습니다. 당신은 모든 자바 스크립트를 사용할 수 있습니다.

<%= f.check_box :terms_of_service, :onchange => 'enableSubmitTag(this)' %> Accept Terms of Services 
+0

레일의 형식을 정할 수 있습니까? –

+0

답변을 업데이트했습니다. 또한 스키마의 terms_of_services에 대한 기본값을 false로 설정합니다. 그렇게하면 사용자가 명시 적으로이를 true로 변경해야합니다. –

+0

테이블에 열을 넣으면 어떻게 사용하는지 알고 있습니다. 나는 그것을 시도 할 수있는 방법을 확인하고 싶었다. –

0

모델이 있어야합니다 : 당신은 체크 박스를 변경해야

validates :terms_of_service, acceptance: true 

양식이 있어야합니다

<%= form_for :user, url: users_path do |f| %> 
    ... 
    <%= f.label :terms_of_service %><br> 
    <%= f.check_box :terms_of_service %> 
    ... 
<% end %> 

및 레일 당신을 위해 다른 모든 것을해야합니다.