コミュ障だから明日が僕らをよんだって返事もろくにしなかった

何かを創る人に憧れたからブログをはじめたんだと思うよ

社会のボトムズがRailsに手を出す #7

これまでのあらすじ

この道をゆけばどうなるものか、危ぶむなかれ、危ぶめば道はなし、踏み出せばその一足が道となり、その一足が道となる。迷わず行けよ。行けばわかるさ。


ということで、前回Railsチュートリアル第六章やりました。モデルつくっていつでもDBいじれるようにしましたよーってところで終わったところです。

前回記事
inujini.hatenablog.com



今回は前回作ったモデルを利用してユーザプロフィール画面を作るなどをやってきます。画面とかいじるやつでやる気がわいたので、次回更新は未定といいつつも早々にやってみることにしました。


ログイン画面をつくろう

とりあえず、何はともあれ画面をつくっていきます。んでこんな感じの画面を作ります。

f:id:andron:20190110223551p:plainf:id:andron:20190110223555p:plainf:id:andron:20190110223606p:plain

いぢったところ

パス 説明
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
こいつですね。メールアドレスに対してアバター画像が紐づけされる仕組みなんで設定とかは結構単純です。ちなみに、リンク先の方はアバターのイラリク的な企画もやっていたりしているから気になったら見てな(宣伝)。


エラーメッセージの実装などなど

f:id:andron:20190110203830p:plain
とりあえずエラーメッセージを日本語化したかったのでこれを利用しました。
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記事の宣伝したくて急ピッチで作った記事だし、次章はゆるゆるやっていきます。

次回へ続く