Railsについて、勉強を初めてみました。
いやぁ、勉強してみて実感しますが、本やブログ記事等の解説は簡単に書かいているのに、実際使ってみると「あれ?どうやるんだっけ?どういう仕組で動いているんだっけ?」と疑
問に思う事ばかりです。ちゃんと理解できているのか・・・不安でしょうがないです。
さて、まだまだ勉強中なのですが、Railsを使って学んだ事をブログ記事に残して置こうと思ったので、「学びシリーズ」(新コンテンツ?)というカテゴリーを設けて書いていきたいと思います。内容は主に、自分で小さな機能を作って、その振り返り記事がメインになると思います。豆知識や小技等、いわゆるTIPS的な事はQiitaに書いていきたいと思います。
作ってみた機能
BCryptライブラリを使ってユーザー登録画面を実装
環境構成
全体構成・完成イメージ
[DB]TABLE
"managers" ("manager_name" varchar NOT NULL, "hashed_password" varchar NOT NULL)
プログラムコード等
Controller
class ManagersController < ApplicationController def new @manager = Manager.new end def create @crt_manager = Manager.new(params[:manager].permit(:manager_name, :password, :password_confirmation)) # DBにデータ保存 if @crt_manager.save render "show" p "登録が完了しました。" else render "new" end end def show end end
newメソッドでは、Managerのインスタンス変数:@managerを生成しています。
createメソッドでは、newメソッドで宣言したインスタンス変数:@managerから画面で入力した名前とパスワード2つを取得しています。permitメソッドを呼ぶことでModelに余計な属性を保存させないようにする事が可能です。DBに入れる値を制限し、余計な属性をDBに保存させない事をストロング・パラメータと言います。その後は、名前と暗号化したパスワードをDB(SQLite)に保存して、show画面に遷移しています。
Model
class Manager < ActiveRecord::Base attr_accessor :password, :password_confirmation def password=(val) if val.present? self.hashed_password = BCrypt::Password.create(val) end @password = val end end
ここではControllerのcreateメソッドで取得したパスワード(password)をBCryptライブラリを使って暗号化しています。
present?メソッドは「unless 変数.blank?」と同じ意味を持ち、変数が空かそもそも変数自体が存在しないかを聞いています。今回は、変数が空か変数自体が存在しない場合はスキップしています。なお、上記プログラムではpassword_confirmationの変数は参照しておらず、passwordのみ参照しています。
ERB
<p>ユーザー登録ページ</p> <%= form_for @manager do |form| %> <table> <tr> <td style="text-align: right">ユーザー名</td> <td><%= form.text_field :manager_name, style: "width: 120px" %></td> </tr> <tr> <td style="text-align: right">パスワード</td> <td><%= form.password_field :password, style: "width: 120px" %></td> </tr> <tr> <td style="text-align: right">再パスワード</td> <td><%= form.password_field :password_confirmation, style: "width: 120px" %></td> </tr> <tr> <td colspan="2" style="text-align: center"> <%= form.submit "登録" %></td> </tr> </table> <% end %>
こちらはControllerのnewメソッドを通して表示されるERB画面です。newメソッドで作られた@managerとfrom_forタグを使ってフォームを生成しています。なお、show画面の説明は割愛します。
学んだ事
Webアプリケーションの基本である画面に入力した値をDBに保存するという流れを理解できた事。また、Rails 4.0から導入されたセキュリティ強化策の1つであるストロング・パラメータというのがある事を知りました。これだけの少ないコードで、これだけの機能を実装できるRailsってやっぱり凄いなと改めて実感しました。
ブログに書くこと。図にする事で、自分の理解も深まった気がするので、このコンテンツは引き続き続けていきたいと思います。