2017-03-01 7 views
0

Ich versuche, ein Benutzerregisterformular erstellen, das eine Reihe von Bedingungen akzeptieren muss, aber ich weiß nicht, wie Sie den Wert des Kontrollkästchens verwenden, um zu überprüfen, ob es wurde geklickt (Serverseite).Rails form_for checkbox Validierung ohne Datensatz in der Datenbank

Ich habe versucht, diese http://guides.rubyonrails.org/active_record_validations.html#acceptance zu verwenden, aber bis jetzt habe ich nichts erreicht.

Ich habe validates :terms_of_service, acceptance: { accept: '1' } in meinem User.rb und in meinem Formular <%= f.check_box :terms_of_service,:value =>'0',:class =>"hidden", :id =>"t_and_c" %>, aber ich kann das Formular senden, ohne darauf zu klicken. Was mache ich falsch? Wenn ich etwas anderes posten muss, um die Frage leichter verständlich zu machen, lassen Sie es mich wissen.

Antwort

0

In Ihrem Formular sollte das Kontrollkästchen True zurückgeben, wenn Sie darauf klicken.

In dem Formular geben Sie nur, wenn das Kontrollkästchen aktiviert ist oder nicht:

<%= f.check_box :terms_of_service %> Accept Terms of Services 
check_box(object_name, method, options = {}, checked_value = "1", unchecked_value = "0") 

In Ihrem Controller speichern Sie genau das, was von der Form zurückgegeben:

#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 

In Sie Migration, I würde eine Standardoption für: terms_of_services hinzufügen, um sie expliziter zu machen.

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

EDIT

Wenn Sie Sie mit Bezug auf Dienstleistungen auf der Serverseite zu arbeiten, nicht über eine Spalte in Ihrem User-Modell erstellen, keine Möglichkeit haben. Sie können nur auf Ihrer Client-Seite mit terms_of_services arbeiten, wenn Sie möchten, ohne eine Spalte zu erstellen. Dies ist, wie Sie tun können, dass:

ein Kontrollkästchen erstellen, ohne die Rails check_box Helfer (denn es wäre ein Objekt benötigen, die Sie nicht haben, da Sie keine Spalte in der Datenbank haben)

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

Disable die Schaltfläche Absenden standardmäßig

Wenn sie das Kontrollkästchen für die Nutzungsbedingungen aktivieren, aktivieren Sie die Schaltfläche zum Absenden erneut.

Wenn Sie: terms_of_services in Ihrer Tabelle speichern, können Sie diese auch auf Ihrer Serverseite validieren. Sie können alle Javascript verwenden. Sie müssen nur das Kontrollkästchen ändern:

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

Können Sie die Antwort für Schienen formatieren? –

+0

Ich habe meine Antwort aktualisiert. Ich würde auch den Standardwert für: terms_of_services in Ihrem Schema auf false setzen. Auf diese Weise muss der Benutzer sie explizit auf "wahr" setzen. –

+0

Ich weiß, wie man es benutzt, wenn ich als Spalte in meine Tabelle lege. Ich wollte prüfen, wie es möglich ist, es ohne zu versuchen. –

0

Modell haben sollte:

validates :terms_of_service, acceptance: true 

Formular haben sollten:

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

und Rails sollte für Sie alles andere tun.