積々RUNMIZZO

日々積み重ね

Fakerの導入(Ruby on Rails)

一覧ページを開発環境で確認するために導入

Gemfileに追加しbundle install

group :development, :test do
    gem 'faker' # <= 追加
end

seedファイルに対応コードを記述しrails db:seed

10.times do
  User.create(
    name: Faker::Name.unique.name,
    email: Faker::Internet.unique.email,
    password: '12345678',
    password_confirmation: '12345678'
  )
end

.uniqueで一意のダミーを作成できる。

プロフィール更新時のエラー対応

地味に5日目

(メンチキッターにユーザー機能追加中)

ユーザープロフィール編集時に入力内容が反映されずロールバックされる

[1] pry(#<ProfilesController>)> @user
#<User:0x0000000107ad47d0> {
                  :id => 1,
                :name => "test",
               :email => "test@example.com",
    :crypted_password => "$2a$10$4/2YHnQjZ9UaYz6JNNmUG.g0TfERU4MFgOjNLayqtKaZHkZrdkz3u",
                :salt => "D7xFwzvdbdDYBQZy2JUf",
          :created_at => Sun, 23 Jan 2022 22:20:05.190854000 JST +09:00,
          :updated_at => Sun, 23 Jan 2022 22:20:05.190854000 JST +09:00
}
[2] pry(#<ProfilesController>)> user_params
{
     "name" => "test2",
    "email" => "test@example.com"
}
[3] pry(#<ProfilesController>)> @user.update(user_params)
  TRANSACTION (4.2ms)  BEGIN
  ↳ (pry):5:in `update'
  User Exists? (3.2ms)  SELECT 1 AS one FROM "users" WHERE "users"."email" = $1 AND "users"."id" != $2 LIMIT $3  [["email", "test@example.com"], ["id", 1], ["LIMIT", 1]]
  ↳ (pry):5:in `update'
  TRANSACTION (2.8ms)  ROLLBACK
  ↳ (pry):5:in `update'
false

エラーメッセージを確認したらパスワード書けよと言われてるけど別に書きたくない

[7] pry(#<ProfilesController>)> @user.errors.messages
{
    :password => ["を入力してください"]
}

モデルに余計な一文があったので削除したら解決◎

validates :password, length: { minimum: 3 }, if: -> { new_record? || changes[:crypted_password] }
validates :password, confirmation: true, if: -> { new_record? || changes[:crypted_password] }
validates :password_confirmation, presence: true, if: -> { new_record? || changes[:crypted_password] }

validates :email, uniqueness: true, presence: true
validates :password, presence: true  # <= コイツ要らんかった
validates :name, presence: true, length: { maximum: 255 }

i18nの小技

金曜日なので気の向くままカタカタ💻

モデル名.human_attribute_name (:カラム名)

  • ActiveRecord::Base のクラスメソッド

  • 内部的に I18n モジュールを利用してくれる

  • config/locales配下のja.ymlに定義してある翻訳内容を良しなに解釈してくれる

(良しなって言葉、この業界でよく聞くよね)

そんな感じで

100日記事4日目完了

fixtureとは(Ruby on Rails)

fixtureとは、モデルクラスに対応するテストデータをあらかじめ定義しておくもので、YAML形式で定義。 開発現場ではfixture replacementと呼ばれるライブラリが使われfactory_botもそのひとつ。

なるほど!

因みに100日記事チャレンジします。

今日で3日目〜

variantsによるテンプレートの切り替え

メンチキッター作っててPCでの見え方とスマホからの見え方は変えて行こうと思ってるのでvariantsの機能は覚えとこう、今の追加機能実装してUI整理するときに使いたい。。

  • 接続端末によってPCとは別のテンプレートを表示できる

  • index.html.erbだったものがindex.html+mobile.erbのようにしてテンプレートが選択

ざっくりメモ✍️

# app/controllers/application_controller.rb

class ApplicationController < ActionController::Base
    before_action :detect_mobile_variant

    private

    def detect_mobile_variant
        request.variant = :mobile if request.user_agent =~ /iPhone/
    end
end
<!-- app/views/books/show.html+mobile.erb -->

<h1>本の情報(for mobile)</h1>

メンチキッターリリース

細々とブログ再開

1月11日(良い日)にガン飛ばしアプリ「メンチキッター」をリリースしました!

良い顔して過ごす大人達へ、たまには悪ぶってみたい少しやんちゃな想いを叶える場所を提供するサービスです◎

現在、診断モード・訓練モードを実装済みで今後も新たなモードを追加予定です☆

(診断結果は東京リベンジャーズをオマージュしているので、好きな方は更に楽しんで貰えるかなと思います!)

引き続き育てて行こうと思うので、進捗をブログにつらつら書き残していこうかと思います! (どこかでがっつりQiita記事を更新しようかと。。)

www.gantobashi.com

JSON形式のデータをレスポンスさせる✍


def index
    user = { id:1, name: "hoge", age: 32 }
    render json: user
end

該当URLにアクセスすると、、

{"id":1,"name":"hoge","age":32}

が表示される。


 render json: user

↑この部分
renderメソッドにjsonオプションを指定すると、指定オブジェクトをJSON形式のデータでレスポンスが返される。


参考

【Rails】 JSON形式のデータを返却する方法とは? | Pikawaka - ピカ1わかりやすいプログラミング用語サイト