2016-12-23 3 views
0

Ich habe benutzerdefinierte Feld zu Registrierungsformular erstellen: Radio-Taste und wählen Sie die Liste Ich habe das Problem, wenn es einen Fehler beim Validieren von Daten (zum Beispiel der Benutzer schrieb das Passwort falsch) Ich werde zum Registrierungsformular weitergeleitet, die benutzerdefinierten Felder verlieren die Daten. Das Beispiel ist in diesen 2 Bilder erklärt:Keep Datenformular nach dem Senden mit Sitzungen in Schienen

Before submitting data

After submitting data

Wie in den beiden Bildern sollte der Benutzer klicken Sie erneut auf das Optionsfeld einen Wert auszuwählen, normalerweise sollte es in der Sitzung gespeichert werden, indem entwickeln.

new.html.erb

<h2>Sign up</h2> 

<%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> 
    <%= f.error_notification %> 

    <div class="form-inputs"> 
     <%= f.input :user_type, as: :radio_buttons, collection: %w(personnal professional), checked: 'personnal' %> 
     <%= f.input :name, required: true %> 
     <%= f.input :city,as: :select,required: true,%> 
     <%= f.input :email, required: true %> 
     <%= f.input :password, required: true, hint: ("#{@minimum_password_length} characters minimum" if @minimum_password_length) %> 
     <%= f.input :password_confirmation, required: true %> 
    </div> 

    <div class="form-actions"> 
     <%= f.button :submit, "Sign up" %> 
    </div> <% end %> 

<%= render "devise/shared/links" %> 

application_controller.rb

class ApplicationController < ActionController::Base 
    protect_from_forgery with: :exception 
    before_action :configure_permitted_parameters, if: :devise_controller? 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name,:city,:user_type,:phone]) 
    end 
end 

User.rb

class User < ApplicationRecord 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 
end 

ich eine Lösung in Stackoverflow hier gefunden, aber ich coudn't es machen arbeite mit device Ich habe bereits Controller entwickelt, aber die Lösung funktioniert nicht für mich. Keep form fields filled after an error (RoR)

+0

Bitte senden Sie den zugehörigen Code, Controller/Ansicht usw. – 31piy

+0

@ 31piy Ich veröffentlichte den Code für das Problem. Für den Entwickler-Controller habe ich keinen Code hinzugefügt, weil ich nicht weiß, was ich hinzufügen soll. – zbakh

Antwort

2

Das Problem hat nichts mit einem zu tun, zu dem Sie eine Verbindung hergestellt haben. Sie legen den Wert des Parameters user_type explizit im Formular fest, sollten dies jedoch nicht tun.

ändern

<%= f.input :user_type, as: :radio_buttons, collection: %w(personnal professional), checked: 'personnal' %> 

Um

<%= f.input :user_type, as: :radio_buttons, collection: %w(personnal professional) %> 

Der Parameter automatisch gesetzt werden wird, auf resource abhängig. Wenn Sie das Formular absenden, sollte der Parameter so bleiben, wie er festgelegt wurde.

Wenn Sie einen Standardwert festlegen mögen, können Sie es wie folgt tun:

<%= f.input :user_type, as: :radio_buttons, collection: %w(personnal professional), checked: resource.user_type || 'personnal' %> 

nicht den besten Weg, aber die einfachste.

+0

danke, gibt es eine andere Möglichkeit, das Optionsfeld standardmäßig aktiviert zu lassen? – zbakh

+0

Bearbeitete die Antwort. Ist es das was du willst? – chumakoff

+0

Vielen Dank, ich suchte dieses Verhalten für 3 Tage! :) – zbakh

Verwandte Themen