2016-12-23 8 views
0

登録フォームを作成するためのカスタムフィールドを追加しました:ラジオボタンとリストの選択は、データの検証中にエラーが発生した場合(たとえば、私は登録フォームにリダイレクトされ、カスタムフィールドはデータを失います。 の例では、これらの2枚の絵で説明されています。レールでセッションを使用して送信した後にデータフォームを保存する

Before submitting data

After submitting data

のように二つの絵には、ユーザが値を選択するために、再びラジオボタンをクリックする必要があり、通常はそれはしてセッションに保存する必要があります考案する。

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 

私はここにStackOverflowでの解決策を見つけたが、私はそれを作るcoudn't私はすでにコントローラを作成しましたが、解決策は私のために働きません。 Keep form fields filled after an error (RoR)

+0

関連コード、コントローラー/ビューなどを投稿してください – 31piy

+0

@ 31piy問題に関連するコードを掲載しました。私は何を追加するのか分からないので、私はコードを追加しませんでした。 – zbakh

答えて

2

この問題は、リンクを張ったものとは関係ありません。フォーム内のuser_typeパラメーターの値を明示的に設定しますが、そうしないでください。

変更

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

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

へのパラメータは resourceに応じて、自動的に設定されようとしています。フォームを送信すると、パラメータは設定されたままになります。

デフォルト値を設定したい場合は、このようにそれを行うことができます。

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

ない最良の方法が、最も簡単な。

+0

ありがとうございます。デフォルトでラジオボタンをオンにする別の方法はありますか? – zbakh

+0

答えを編集しました。それはあなたが欲しいものですか? – chumakoff

+0

ありがとう、私は3日間その行動を探していました! :) – zbakh

関連する問題