これまでのあらすじ
この道をゆけばどうなるものか、危ぶむなかれ、危ぶめば道はなし、踏み出せばその一足が道となり、その一足が道となる。迷わず行けよ。行けばわかるさ。
ということで、前回Railsチュートリアル第六章やりました。モデルつくっていつでもDBいじれるようにしましたよーってところで終わったところです。
今回は前回作ったモデルを利用してユーザプロフィール画面を作るなどをやってきます。画面とかいじるやつでやる気がわいたので、次回更新は未定といいつつも早々にやってみることにしました。
ログイン画面をつくろう
とりあえず、何はともあれ画面をつくっていきます。んでこんな感じの画面を作ります。
いぢったところ
パス | 説明 |
---|---|
config/routes.rb | サインアップ関連のルーティング |
app/controllers/***_controller.rb | 登録先コントローラのアクションなど記述 |
app/views/users/***.html.erb | 登録先ビュー |
app/helpers/***_helper.rb | Gravatar表示関連 |
とまあそのあたりいじってます。ガワだけだとまあ言うことない。あ、そういえばヘルパーでGravatar表示関連いじってましたね。
# app/helpers/users_helper.rb module UsersHelper def gravatar_for(user, size: 80) gravatar_id = Digest::MD5::hexdigest(user.email.downcase) gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}?s=#{size}" image_tag(gravatar_url, alt: user.name, class: "gravatar") end end
はじめての場合はGravatarって何ってなるんだろうけども、僕は賢いのでそれの使い方を知っていたのだ……。
Gravatar 関連過去記事
inujini.hatenablog.com
こいつですね。メールアドレスに対してアバター画像が紐づけされる仕組みなんで設定とかは結構単純です。ちなみに、リンク先の方はアバターのイラリク的な企画もやっていたりしているから気になったら見てな(宣伝)。
エラーメッセージの実装などなど
とりあえずエラーメッセージを日本語化したかったのでこれを利用しました。
GitHub - svenfuchs/rails-i18n: Repository for collecting Locale data for Ruby on Rails I18n as well as other interesting, Rails related I18n stuff
「config」あたりにconfig.i18n.default_locale = :ja
記述するだけで上みたいに日本語化してくれるそうです。
フォームで何作れるか以下リンクみればいいんだと思った。
参考
フォーム(form) - - Railsドキュメント
あとは、パラメータへの制限とかそういうのをコントローラに……。チュートリアルにあるから実装してるけど、flashいらないんじゃないかとか思いながら実装してます。
# app/controllers/users_controller.rb class UsersController < ApplicationController ### 略 def create @user = User.new(user_params) if @user.save flash[:success] = "Welcome to the Sample App!" # flashの設定 redirect_to @user else render 'new' end end private def user_params params.require(:user).permit(:name, :email, :password,:password_confirmation) end end
テストの方は演習含めこんな感じと思われ。POST時の挙動をテストできるようになったのでなんか実践的なことをやっているような気がする(気のせい)。
# test/integration/users_signup_test.rb require 'test_helper' class UsersSignupTest < ActionDispatch::IntegrationTest test "invalid signup information" do get signup_path assert_no_difference 'User.count' do post users_path, params: { user: { name: "", email: "user@invalid", password: "foo", password_confirmation: "bar" } } end assert_template 'users/new' end test "valid signup information" do get signup_path assert_difference 'User.count', 1 do post users_path, params: { user: { name: "Example User", email: "user@example.com", password: "password", password_confirmation: "password" } } end follow_redirect! assert_template 'users/show' assert_not flash.empty? end end
テストでは、「get、post、patch、put、head、delete」の6種類がサポートされているとのことです。
関係ないんですけどWindows環境だと$ rails db:migrate:reset
でデータベース削除できないとか言って、コマンド効かないんですけど……。一応対策としては、愚直にデータベースファイルを手動で削除することで回避できます。
Permission denied @ ***** - C:/*****/db/development.sqlite3
Couldn't drop database 'db/development.sqlite3'
rails aborted!
ちゃんとした対策はどうすんですかね……?
第七章の感想
内容としてはそんな感じです。本来ならプロのデプロイ(激うまギャグ)までやっていきたいところだけど、今のところ丸パクリクソアプリ路線なんでHeroku使うことない……。まあそんな感じです。CRUDアプリとして成り立たせるまでは一気にやりたいんだけど、見た感じだと10章ぐらいまでやんなきゃあかんのかな、長いな……。章が増えるとどんどん内容が肥大化していくし、そろそろ飽きてきた……。
次章はログイン処理か。"devise" とか使うのかと思ったけども検索に引っかからないからスクラッチで作るのかね……。まあとりあえずGravatar記事の宣伝したくて急ピッチで作った記事だし、次章はゆるゆるやっていきます。
次回へ続く