Deviseの登録情報をカスタマイズ

ご無沙汰しています。ちけんです。

 

Railsのユーザー認証に使われるDeviseというGemがあります。

f:id:kytiken:20160501152022p:plain

GitHub - plataformatec/devise: Flexible authentication solution for Rails with Warden.

ジェネレータで作られる登録フォームは"email"と"password"と"password confirm"しか作られません。

 

この記事では、登録フォームをカスタマイズして独自の項目を保存できるようにする方法を紹介します。

 

なぜしようと思ったか

そもそもDeviseのジェネレータで作られる登録フォームは最小限です。

例えばTwitterの登録画面と比較してみると、結構違うことがわかります。

f:id:kytiken:20160501122808p:plain

私たちはTwitterの登録画面を作りたいわけではないですが、しかし、しばしばユーザーの名前を追加したかったり、電話番号を追加したかったりします。

 

僕がDeviseで作ったUserモデルに名前と電話番号を追加するのに、どうしたのかを書いていこうと思います。

 

Railsアプリケーションを作る

サンプルとなるRailsアプリケーションを作ります。

ここでは例としてhogefugapiyoアプリケーションというのを作って解説しようと思います。

ちなみにバージョンは下記のとおり

Rails 4.2.6

Devise 4.0.1

 

rails new hogefugapiyo
cd hogefugapiyo
# Gemfileにdeviseを追加
echo "\ngem 'devise'" >> Gemfile
bundle install
bin/rails generate devise:install
# Userモデルを作る
bin/rails generate devise user

 カラムを追加する

何はともあれ、名前と電話番号をUserモデルに追加します。

bin/rails generate migration AddNameAndTelToUsers name tel
bin/rake db:migrate

フォームを変更する

Deviseのカスタムビューを生成します。

bin/rails generate devise:views user

 すると下記のようなapp/views/users以下にファイルが作られます。

f:id:kytiken:20160501135041p:plain

いろいろファイルがありますが、登録フォームはapp/views/users/registrationsの2ファイルです。

名前と電話番号を追加します。

 

edit.html.erb

gist582ea89584651909f7921c357f96e129

 

new.html.erb

gistbfe64cf9867b6102a5fb6d6fd0bd84c4

 

こんなふうになる

f:id:kytiken:20160501153820p:plain

保存処理を変更する

保存処理を変更するためにカスタムのコントローラーを作ります。

rails g devise:controllers users

 

config/routes.rbを修正して登録処理にカスタムのコントローラーを使用するようにします。

gist3ce1e703a0bd6d1fb351fe1bf9623972

 

app/controllers/users/registrations_controller.rbを編集します。

 

registrations_controller.rb

gistf2478670bf287af9fd640add0db5ca08

 

registrations_controller.rbの解説 

ポイントとなるのは以下の部分

before_action :configure_sign_up_params, only: [:create]
before_action :configure_account_update_params, only: [:update]
(中略)
 # If you have extra params to permit, append them to the sanitizer.
  def configure_sign_up_params
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
  end

  # If you have extra params to permit, append them to the sanitizer.
  def configure_account_update_params
    devise_parameter_sanitizer.permit(:account_update, keys: [:name])
  end

ここで新たにフォームに追加したnameを追加しています。

 

    
  def build_resource(hash=nil)
    super(hash)
    if params['tel'].present?
      first_number = params['tel']['first']
      center_number = params['tel']['center']
      last_number = params['tel']['last']
    end
    self.resource.tel = "#{first_number}-#{center_number}-#{last_number}"
  end

  def update_resource(resource, params)
    super(resource, params)
    if params['tel'].present?
      first_number = params['tel']['first']
      center_number = params['tel']['center']
      last_number = params['tel']['last']
    end
    self.resource.tel = "#{first_number}-#{center_number}-#{last_number}"
  end

この部分でtelを設定しています。

ストロングパラメーターを使わずに値を設定したいのでこのようにしています。

 

親クラス(Devise::RegistrationsController)のメソッドを上書きして、こんなような処理を実現するようにしています。

 

おわりに

僕はこんなふうにしましたが、もっと良いやり方があれば教えてほしいので、だれか記事にしてください。

registration_controller.rbのbuild_resourceとupdate_resourceを上書きしていますが、デフォルトのコメントに入ってなかったのであんまりいいやり方ではないのかもしれません。

Rails Girls Kyoto 2ndに行ってきました #railsgirlskyoto

どうもちけんです。

Rails Girls Kyoto 2ndにコーチとして参加してきました。


Kyoto 28-29th November 2014

ワークショップ

今回はマンツーマンで教えるということだったのだけど良かった 
今回担当したのはミユカルさん

 

Rails Girls Osakaのときはプログラミングしたことがある人を担当したけど、今回は違ってほんとの初心者の人を担当しました。大変勉強になった
相手の参加者の方がrailsはじめたての頃の自分と重なってなんとも言えない気分になりました。(「昔僕もわかってなかったなー」とか「ここで詰んだわー」とか)
うざい感じになってたらすいません・・・
興味持ってくれてたらいいなー・・・

アフターパーティー

f:id:kytiken:20141130123104j:plain
f:id:kytiken:20141130123120j:plain
実際おいしかったです。
 
Rails Girls Osakaに来ていた人が何人かいてぼっち回避できました。ありがとうございます。知り合い大事
 

その他感想

むかいの席の参加者の方がすごくエネルギッシュな人ですごいと思った。(自分にはあのエネルギッシュさが足りねぇ・・・)
 
オーガナイザーのゆりりーさんの笑顔すばらしかったです

もらったもの

Tシャツもらいました(くしゃくしゃになってすいません)
f:id:kytiken:20141130122932j:plain
かわいい
 
ステッカーも
f:id:kytiken:20141130123247j:plain
 

全体の感想

楽しかったです(小学生並みの感想)

参加者、スタッフの皆さんお疲れ様でした。

RailsGirlsOsaka#1 に行ってきました

インストールデー

第一印象:会場キラキラしてる

f:id:kytiken:20140606190937j:plain

 Rails Girls インストール・レシピ(http://railsgirls.jp/install/)を参考にインストールしていった。

Windows,Mac,LinuxRubyRailsをインストールする方法が丁寧に書かれてる。

とても良い。

ネットワークがとても重くてダウンロードに時間かかった

コーチのみなさんが、インストールを待ってる時間に「RubyとはGemとはRailsとは」みたいなことを話していて、「すごいなぁ・・・」なんて思っていた。

当日

エレベーター前

f:id:kytiken:20140607090026j:plain

オーガナイザー挨拶

f:id:kytiken:20140607093258j:plain

 

Rails Girls アプリ・チュートリアル(http://railsgirls.jp/app/)を参考に進めてもらった

教えるのむずい。

僕が担当した班はWindows班だったのだけど、scaffoldした後にrails server実行してみたらエラー画面が発生してて非常に混乱した。

Windows 8 で ExecJS::RuntimeError が出たときは - Ruby on Rails with OIAX

これを見ながらやって解決したのだけど、「こんなエラー見たら、初心者だった頃の自分だったら諦めちゃうなぁ・・・」なんて思ってた

途中で「オープンソースソフトウェアが何なのかも説明してください。」というのがあって非常にむずいと思った。

あとRailsGirls特有のBentoBoxというのがあって、めっちゃむずいけどたのしかった。

なんだかんだと言いつつ1日でHerokuにアップロードするところまで行ってよかった。

その他

Heroku弁当(結構多い。うまかった)

f:id:kytiken:20140607120403j:plain

 

Heroku氏...

f:id:kytiken:20140607123223j:plain

 

3時のおやつ

f:id:kytiken:20140607150250j:plain

 

感想

みんな楽しそうだったし、実際楽しかった。

戦利品

RailsGirlsOsakaちゃんステッカー。かわいい

f:id:kytiken:20140608151336j:plain

 

KDDI Web Communicationsのノート

f:id:kytiken:20140608165432j:plain

 

その中身。かっちょいい

f:id:kytiken:20140608165528j:plain

 

EnginYardパンダ

f:id:kytiken:20140607151513j:plain

 

くらうどんステッカー

f:id:kytiken:20140608155335j:plain

仲間

おわりに

オーガナイザーのつじたさん、スタッフのみなさん、会場提供のアルメディア・ネットワークさん、スポンサーの方々、コーチと参加者のみなさん、ほんとうにありがとうございました。

 

わんくま同盟 大阪勉強会 #58に行った

わんくま同盟 大阪勉強会 #58 http://www.wankuma.com/seminar/20140308osaka58/

に行ってきた

 

f:id:kytiken:20140308175700j:plain

f:id:kytiken:20140308175623j:plain

感想

  • 初めてLTした
  • ラブライブの布教ができた
  • いろいろ勉強になった

というのが主なところ

各感想の詳細を以下に書いていく

初めてLTした

「bundlerでお手軽自作RubyGems作成」というお題で発表した

めっちゃ緊張した!!

あと小ネタがウケてよかった

ラブライブの布教ができた

LTでも最後に2期の宣伝をした

懇親会では

@tworksさんの協力の元、かなり強烈にラブライブ!の布教ができた

いろいろ勉強になった

  1. 消費税対応   5%→8%に移行する際に問題になったこと。総額表示や1円以下の価格は合算するのかといったことが非常に勉強になった
  2. LINQ  「LINQ素敵」と思えた。WebAPIを叩くときや裏では泥臭いことしてたりするんだよって話は、自分がやったことがないだけに勉強になる
  3. Android 4.4 KitKat  マイナーバージョンアップなんてもんじゃないくらいめっちゃ変わってるところ多いのな、やばい
  4. iOSのアプリ内課金  めっちゃわかりやすかった。StoreKitやばい。スクフェスの裏ではめっちゃめんどくさいことしてんだろうなーなんて思った。あとラブカストーンほしい

その他

ステッカー増えた

f:id:kytiken:20140310200244j:plain

 

 

以上

Macで「次のウィンドウを操作対象にする」のショートカットをAlt+Tabに変更した

なぜ変えたか

Macを使っていてブラウザやターミナルを複数のウインドウを開く時があります。

そのときにほかのウインドウへ切り替えるときには標準だとCommand+F1でできるのですが、HHKを使っているとCommand+Fn+1と押さなければならないのでとてもめんどくさいのです。

だからショートカットを変えました。

 

変え方 

f:id:kytiken:20121017182143p:plain

システム環境設定を開き

キーボードをクリックします

 

 

f:id:kytiken:20121017182620p:plain

 キーボードショートカットをクリックして

左のメニューのキーボードと文字入力をクリックして

「次のウインドウを操作対象にする」と書かれている所の右、

Command+F1と書かれている部分をクリックします

 AltとTabを押します

 

これで変更されました

プロ生第15回@大阪に行ってきた

プログラミング生放送勉強会 第15回@大阪に行ってきました。

4/21 プログラミング生放送勉強会 第15回@大阪 [Windows 8, JavaScript, Azure, Kinect 他] #pronama « プログラミング生放送

f:id:kytiken:20120421170137j:image

場所はマイクロソフト関西支店セミナールーム
f:id:kytiken:20120421170147j:image

会場ではお菓子が配られました
f:id:kytiken:20120421145729j:image
おいしかったです(小学生並みの感想)

セッション

1.GC 擬(もどき)を JS で書いてみた - うえださん
マーク&スイーブGCというやつを使う
断片化されたメモリをデフラグするというような話

2.3日で作る Web サイト - 5zjさん
IT 勉強会スタンプラリーのサイトを作った話
ASP.NET Razorとかおもしろそうだった
Razorはwebページの中にサーバーベースのコードを埋め込むことができる
ASP.NET Razor
あとBootstrapすごいという話
規定のclass名をつけるだけでボタンが今風になったりとかなにその神状態
ピクセル計算がなくて便利
Twitter Bootstrap

3.明日から使えない IndexedDB - mzsmさん
IndexedDBはwebでnoSQLデータベースを使うJavascriptAPI
仕様が頻繁に変わる
スキーマレス
コールバック関数まみれ
IndexedDB - MDN

4.Metro styl apps の ALL テクノロジ★早めぐり紹介 & C++ ネイティブアプリケーションフィーチャー! - hr_saoさん
XAMLとかCPUとかGPUとかそこらへんの話だったような・・・
全く触ったことなくて話が右から左に通りぬけてました
ごめんなさい!!

5.最近はやりのプラットフォームを楽しもう(Azure & kinect) - kamebuchiさん
AzureはPaasで使った分だけ課金
オープンソースでもつかいやすい
コンテナ型データセンター

Kinectは赤外線を出して人の形を読み取る
Kinect for XBox, Kinect for Windowsの二種類がある
Kinectの前で人が動作したら画面の中にいるクラウディアさんがそのとおりに動いてくれるデモがあった。
無駄にエロかった
繰り返します
無駄にエロかった!!

6.LT
C++のwebアプリケーションフレームワーク - kyubunsさん
闇の軍団なんだなと思った

・リーンスタートアップ - you & iさん
リーンスタートアップの話でした

・share pointの話
share pointというおもしろかったです。ソフトについて話てくれました


SharePoint Server 2010 - 組織とWebの生産性を革新する総合 ビジネス コラボレーション プラットフォーム -



感想

個人的にBootStrapすげえ!!っていうのが一番印象に残りました。
話題になってたのは知ってましたが5zjさんがライブコーディングしてくれてたので試してみようと思いました。
その後の懇親会でいろいろな方の話を聞けておもしろかったです。
プロ生に参加された方お疲れ様でした!!