2017-03-13 4 views
0

私はRailsには新しく、Deviseがユーザーのリソースを扱う方法とフォームの仕組みを理解しようとしています。アプリ/ビュー/工夫/セッションインサイドフォーム内のデビーズとリソースを理解しようとしています

/new.html.erb(私が変更されていない)次のコード設定で

<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %> 
    <%= devise_error_messages! %> 

    <div class="field"> 
    <%= f.label :email %><br /> 
    <%= f.email_field :email, autofocus: true %> 
    </div> 

    <% if devise_mapping.confirmable? && resource.pending_reconfirmation? %> 
    <div>Currently waiting confirmation for: <%= resource.unconfirmed_email %></div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :password %> <i>(leave blank if you don't want to change it)</i><br /> 
    <%= f.password_field :password, autocomplete: "off" %> 
    <% if @minimum_password_length %> 
     <br /> 
     <em><%= @minimum_password_length %> characters minimum</em> 
    <% end %> 
    </div> 

    <div class="field"> 
    <%= f.label :password_confirmation %><br /> 
    <%= f.password_field :password_confirmation, autocomplete: "off" %> 
    </div> 

    <div class="field"> 
    <%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br /> 
    <%= f.password_field :current_password, autocomplete: "off" %> 
    </div> 

    <div class="actions"> 
    <%= f.submit "Update" %> 
    </div> 
<% end %> 

そしてがあります/ routes.rbをライン

があります
devise_for :users 

これは、どのようなリソースをフォームで使用するのかを知っているのですか?私が設定ルートを変更した場合、フォームは送信時にDBの別のレコードを変更しますか?

最終的には私が追加したユーザーデータ(ユーザー名など)の他の要素を修正できるようにしたいと考えています。このビューに追加のフォームフィールドを追加して、ユーザーのこれらの列を正常に変更できますか?

答えて

1

これは、フォームで使用するリソースをどのように知っているのですか?私が設定ルートを変更した場合、フォームは送信時にDBの別のレコードを変更しますか?

端末でrake routes | grep deviseコマンドを使用すると、これらのルートを確認できます。道案内ではcontroller#actionsをビューにマップするので、彼はdevise/session#newアクションを内のビューを使用することを知り、URL /users/sign_inを使用します。また、ルートはGETとPUTを区別します。新しいアクションを呼び出すと、GETリクエストを実行してフォームを表示します。ログインまたはサインアップフォーム(devise/sessions#createまたはdevise/registrations#create)を送信すると、プットアクションが実行されます。 変更または作成するレコードは、データベースでクエリを実行するコントローラアクションによって異なります。

 new_user_session GET  /users/sign_in(.:format)         devise/sessions#new 
      user_session POST  /users/sign_in(.:format)         devise/sessions#create 
    destroy_user_session DELETE /users/sign_out(.:format)         devise/sessions#destroy 
     new_user_password GET  /users/password/new(.:format)        devise/passwords#new 
     edit_user_password GET  /users/password/edit(.:format)        devise/passwords#edit 
      user_password PATCH /users/password(.:format)         devise/passwords#update 
         PUT  /users/password(.:format)         devise/passwords#update 
         POST  /users/password(.:format)         devise/passwords#create 
    new_user_confirmation GET  /users/confirmation/new(.:format)       devise/confirmations#new 
     user_confirmation GET  /users/confirmation(.:format)        devise/confirmations#show 
         POST  /users/confirmation(.:format)        devise/confirmations#create 

ですから、githubのhttps://github.com/plataformatec/devise/blob/master/app/controllers/devise/registrations_controller.rbにしたり、rails generate devise:controllers [scope]を実行することで、あなたのアプリで生成できることを表示することができdevise_controller内部。 registrations#create工夫内部この例で は、次のコードで新しいユーザーを作成します。

build_resource(sign_up_params) 

工夫の私の限られた理解のためにそれをやってに似ている:

input_paramsはrails5ある
@user = User.new(input_params) 

強いparams。登録するユーザーのタイプと場所は、input_paramsおよび使用しているモデルによって異なります。モデルUserは、db内のusersテーブルに書き込みます。

工夫 http://guides.rubyonrails.org/routing.html#crud-verbs-and-actions

最終的に私は私が追加されたユーザデータの他の側面(例えば、ユーザ名)を変更できるようにしたいです。このビューに追加のフォームフィールドを追加して、ユーザーのこれらの列を正常に変更できますか?

これは非常に簡単です行う、あなたはあなたのapp/controllers/application_controller.rbに必要にパラメータを追加するには、次のメソッドを作成して、ユーザーにそれらの列を追加するには、移行を作成する必要があります

def configure_permitted_parameters 
    devise_parameter_sanitizer.permit(:sign_up, keys: [:firstname, :lastname, :country, :location...]) 
    devise_parameter_sanitizer.permit(:account_update, keys: [:firstname, :lastname, :country, :location...]) 
end 

強いのparamsを考案表。

次に、ビューdevise/registrations/new.index.htmledit.index.htmlと他のすべてのビューを編集する必要があります。

さらに詳しい情報については、ガイドオンラインまたはスタックオーバーフローの説明を参照してください。

How do I add additional fields to the Devise 'sign up' page?

Adding Fields To Devise Sign Up Using Rails 4

+0

うわー、スーパー、有益で役立つ、ありがとうございました!強力なパラメータについての1つの質問は、application_controller.rbのbeforeフィルタ(例えば、 'config_permitted_pa​​rameters'とそれを呼び出すprivateメソッド)を介して行うべきでしょうか? – oneWorkingHeadphone

+0

私は上記を行い、それはほぼ完全に機能しました。私がしなければならなかった唯一の追加的な事は、beforeアクションにifを追加することです。 'before_action:configure_permitted_pa​​rameters、if:devise_controller?'素晴らしい説明をもう一度ありがとう! – oneWorkingHeadphone

+0

うれしかったです。私はちょうど私に尋ねるどんな問題でも、今読んでいます。ありがとう。ファブリツィオ –

関連する問題