Rails関連のことを調べてみた2022年03月14日

Rails関連のことを調べてみた2022年03月14日

rails db:migrateしたのにDBに反映されなかった時の話①

# はじめに

1月〜プログラミングスクールで学習しています。
これから平日は~3/25まで毎日何かしらアウトプットのため投稿を続ける予定です。
今回は rails db:migrateコマンドを実行した際にDBに反映されなかったことについて書きます。
長くなるので2つの記事に分けます。
まずは”NO FILE”というマイグレーションファイルができてしまったことについて書きました。
※Ruby2.6.5の環境を使用し学習しています。

# 事象

rails db:migrateを実行すると下記のようにエラーになりました。
“`:ターミナル
% rails db:migrate
== 20220310073337 CreateDietrecords: migrating ================================
— create_table(:dietrecords)
-> 0.0140s
== 20220310073337 CreateDietrecords: migrated (0.0141s) ==================

元記事を表示

railsにwebpackerを導入する方法

railsにwebpackerがない場合、導入する方法を紹介します。

※ 注意

webpackerをインストールするにはyarnを先にインストールしておく必要があります。

brewよりnpmでyarnをインストールした方がいいそうです。

https://qiita.com/suisui654/items/1b89446e03991c7c2c3d

https://qiita.com/NaokiIshimura/items/8203f74f8dfd5f6b87a0

まず最初にrailsのアプリを作成した状態にしておきます。

railsのアプリが作成できたら

rails の gemfile に 以下を入力します。

“`terminal:gemfile
gem ‘webpacker’, ‘~> 4.0’
“`

次にターミナルでアプリファイルの場所でbundle installと入力します、

“`terminal:terminal
bundle install
“`

最後にターミナルでrails webpacker:installと入力します。

“`termi

元記事を表示

Rails7+deviseで起こり得るエラーとその対処法

## はじめに
Railsを使ったことがある人なら1度はお世話になるgem ‘devise’

本稿執筆時点(2022/03/14)でdevise(Ver4.8.1)はまだRails7に完全対応してません
>4.8.1 – 2021-12-16
>enhancements
>Add support for Rails 7.0. Please note that Turbo integration is not fully supported by Devise yet.

[deviseの更新履歴][devise]

実際に導入した時に、いろいろ調べたところ日本語で書かれているのが少なかったので
Rails7でもdevise使いたいよ!!!! という人の一助になればと、まとめてみました。
素人に毛が生えたような人間が書いてるので、おかしなところなどは指摘していただけるとありがたいです。

## 開発環境
Ruby 3.1.1
Rails 7.0.2.3
devise 4.8.1

## 発生する可能性のあるエラー
– サインアップ時に以下のエラーが出る
“`
NoMethodErr

元記事を表示

Rubyのブロックを解説してみた

メタプログラミングRubyの4章を読んでアウトプットがてら解説記事を書いてみようとおもいます。

## まずは基本から
まずはブロックとは何かという基本的なものを確認しましょう。
“`do ~ end“`や“`{}“`で定義されたもので、メソッドが呼び出されたときのみブロックを定義できます。
そして、ブロックはどこでも存在できるコードではないんです。ローカル変数やselfといったものが必要になるんです。
これらはオブジェクトと関連性をもったもので**束縛**と呼ばれることもあります。
実際にコードを見ていきましょう
“`
def ex_method
yield
end

var = 1

ex_method do
var += 1
local_var = 0
end

var #=> 2
local_var #=> NameError (undefined local variable or method `local_var’ for main:Object)
“`
上記のコードのように、ブロック内で新しく束縛を定義したとき、ブロックが終了した時点でその束縛は

元記事を表示

Basic認証(アプリごとに違うpassを設定する)

とても基本的なことですが記録用にメモします。

新しくWEBアプリケーション開発でBasic認証を設定する際に、
以前作成したアプリのBasic認証用name,passがそのまま反映されてしまったので
原因を調査。

単純に開発環境の環境変数名が以前作成したアプリと同じ変数名になっていた。

(例文)
・以前作成していた環境変数
“`
export BASIC_AUTH_USER=’sample’
export BASIC_AUTH_PASSWORD=’1111′
“`

・今回新しく作成した環境変数
“`
export BASIC_AUTH_USER=’test’
export BASIC_AUTH_PASSWORD=’2222′
“`

↑これでは同じ変数名にname,passを設定しているので当然違うname,passにはならない。

**改善コード**
“`
export BASIC_AUTH_USER_2=’test’
export BASIC_AUTH_PASSWORD_2=’2222′
“`

このように変数名を変更することで違うアプリでも個々に設定できる。

元記事を表示

自作アプリを作る マイクロポスト

## マイクロポストコントローラのアクションを指定する
### config/routes.rb
“`rb
Rails.application.routes.draw do
get ‘password_resets/new’
get ‘password_resets/edit’
get ‘sessions/new’
root ‘static_pages#home’
get ‘/signup’, to: ‘users#new’
post ‘/login’, to: ‘sessions#create’
delete ‘/logout’, to: ‘sessions#destroy’
resources :users
resources :account_activations, only: [:edit]
resources :password_resets, only: [:new, :create, :edit, :update]
resources :microposts, only: [:crea

元記事を表示

Laravel と Ruby on Rails の CRUD

Laravel と Ruby on Rails でそれぞれアプリ開発をしていて,CRUD に対応するアクション名を混同しそうになったので整理したいと思います!

# Laravel での CRUD

以下のように書くことで,
“`php
use App\Http\Controllers\PhotoController;

Route::resource(‘photos’, PhotoController::class);
“`
下の表のような,様々なアクションを処理するためのルートを定義できます!

|HTTP verb |パス |アクション | 目的|
|—|—|—|—|
|GET |/photos |index |全ての写真の一覧を表示|
|GET |/photos/**create** |**create** |写真を1つ作成するためのHTMLフォームを返す|
|POST |/photos |**store

Rails6でJavaScriptの動的読み込み

## 実現したいこと
JavaScript内からDB内のデータを動的に読み込みたい✅

## 開発環境
Rails6系
Ruby3系

アプリ:[Muscle Beat](https://www.muscle-beat.com)(スマホ専用筋トレ系音ゲー)
[GitHub](https://github.com/jibiking/muscle_beat)
テーブル(例)↓
[![Image from Gyazo](https://i.gyazo.com/a0eef96b76e54d3df43a1c5255f5566e.jpg)](https://gyazo.com/a0eef96b76e54d3df43a1c5255f5566e)

## 結論
view内の“`scriptタグ“`に“`erbタグ“`を用いて動的に読み込ませたいJSを記載します!

たしかにRails6系のJavaScriptの記述は“`app/javascript/packs“`以下にするのが通常です。
しかし上記pack

Railsでphina.jsの動的読み込み

## 実現したいこと
バックエンド(Rails)から保存したDB内のデータを呼び出して、動的にフロント(phina.js)に入れて、ゲームをプレイできるようにする✅

[phina.jsとは](https://phinajs.com/):ゲームを簡単に作ることのできるJavaScriptのライブラリ

## 開発環境
Rails6系
Ruby3系
phina.js 0.2.3(CDN)
アプリ:[Muscle Beat](https://www.muscle-beat.com)(スマホ専用筋トレ系音ゲー)
[GitHub](https://github.com/jibiking/muscle_beat)
テーブル(例)↓
[![Image from Gyazo](https://i.gyazo.com/a0eef96b76e54d3df43a1c5255f5566e.jpg)](https://gyazo.com/a0eef96b76e54d3df43a1c5255f5566e)

## 1. viewでphina.jsの環境構築
ゲームプレイ画面を作成するvi

Next.jsについてRailsと比較しながら少し調べた

# 0. はじめに

使ったことはないが気になったので調べてまとめた。

# 1. RailsとNext.jsの比較

|| Rails | Next.js |
|:-:|:-:|:-:|
|雛形作成 | `rails new` | `create-next-app` |
|ルーティング| routes.rb | File-system Routing |
| クライアントサイドルーティング| turbolinks | next/link |
| Static Site Generation| ○
(ActiveRecordが不要なのでRailsを使う必要はない。) | ◎ |
| Server Side Rendering| ◎
(Server Side Templatingとも呼ばれる。) | ○ |
| Client Side Rendering |△
(フレームワークのような規約がないJavaScriptでAjaxを実行する必要がある。)| ○
(File-system RoutingやSEO/OGPの最適化が不要になるため、Reactを使った方

「Rails」urlとpathの違いを初心者向けに解説

# _urlと_pathの違いについて

簡単に申し上げるとurlは絶対パスでpathは相対パスである。

### urlについて解説

_urlの形は絶対パスである。例えば、 
“`new_user_url“`という書き方は “`http://localhost:3000/users/new“`と書くのと同意である。
リダイレクトではHTTPの性質上、完全なURLが求められるのでredirect_toメソッドの引数はURLで指定するべきである。
逆に言えばredirect_toメソッドの引数でしか_urlという書き方は使われない。
### pathについて解説

_pathの形は相対パスである。
“`new_user_path“` という書き方は “`/users/new“`と書くのと同意である。
_pathという形は基本的にredirect_to以外で使うと覚えておけば良い。
例えばform_withやlink_toなど。

## 「“`redirect_to @post“`」という書き方(上級者向け)

“`redirect_to post_url(@p

Git,Githubを使用してherokuへデプロイ

初めての投稿になります。
こちらは、私の備忘録として残しておきます。

# 前提
デプロイしたいアプリが作成済み、GitHubにアカウント登録済み、GitHubにリポジトリを作成済みで、ブランチを切っている状態で、今回はrailsで作成したアプリをデプロイしていきます。

# 実行の流れ
“`!!!
まず、ステージングエリアにカレントディレクトリ以下のファイルをまとめて追加します
git add .

次に自分が変更したファイルをローカルリポジトリに保存します。
git commit -m “コミット名”

Githubにプッシュします。
git push –set-upstream origin ブランチ名

こちらでmasterブランチに変更します。
git checkout master

Githubにプッシュしたブランチ名を使用してマージを行います。
git merge ブランチ名

最後にherokuにデプロイします。
git push heroku
“`
これでherokuへのデプロイが完了です。

# まとめ
初めての投稿なので、誤字脱字やご指摘等ありましたらコメ

エラーメッセージの日本語化

オリジナルアプリを開発する過程で、ユーザー登録時に入力に誤りがあった場合に表示されるエラーメッセージを日本語化に。

備忘録のため手順を記載する。

まずはapplication.rbを編集。

“`ruby:config/application.rb
module Grucale
class Application < Rails::Application version. config.load_defaults 6.0 config.i18n.default_locale = :ja #追記 end end ``` ※``:ja``は日本語設定を意味する 次にGemfileの記述 ```rubu:Gemfile #最下部に追記 gem 'rails-i18n' ``` 追記したら``bundle install``を実行。 ここまでで挙動を確認すると、``Passwordを入力してください``のように一部しか日本語化されていない。 それを解消するために英語から日本に翻訳してくれるファイルを作成する。 config/localesディレ

Railsの3つの環境【Ruby on Rails】

Railsには以下の3つの環境がある
* テスト環境(test)
* 開発環境(development)
* 本番環境(production)

Railsの`Rails`オブジェクトには`env`属性があり、開発環境において、`Rails.env.development`を実行すると、`true`が返ってくる。

Rails consoleやRails serverはデフォルトでは開発環境だが、`$ rails console test`、`$ rails server –environment production`など環境をパラメータとして渡すと、その環境で実行することができる。

また、アプリケーションを本番環境で実行する場合は、`rails db:migrate`を本番環境で実行してデータベースを作成する必要があり、`$ rails db:migrate RAILS_ENV=production`を実行する。

注意としては、上記のように、console、sever、migrateで環境の指定の仕方が違う。

Herokuは本番サイト用のプラットフォームのため、デフォルトで

【個人note】Ruby on Rails

## 慣習・常識

#### Rubyでは真偽値(true, false)を返すメソッド名は慣習的に’?’をつけることが多い。
参考:[Array#include?](https://docs.ruby-lang.org/ja/3.0/class/Array.html#I_INCLUDE–3F)


#### 可読性を考え、一つのメソッドが10行くらいに収まるよう心がける。


#### “(ダブルクォーテーション)は入れ子にする事はできない。
“(ダブルクォーテーション)は入れ子にすることはできないので、外側は’(シングルクォーテーション)に変えると良い。

“`:悪い例
“>
“`

“`:良い例

VScodeでerbファイルをEmmet有効にする際に気づいたこと

VScodeのEmmet補完の設定

erbファイルでもEmmetを有効にするには、VScodeのsettingにある **Emmet:include Languages** を設定します。ググって調べると以下の画像のように設定で完了したらいいらしい。
[![Image from Gyazo](https://i.gyazo.com/df3d872e452cad2660d33c138628da31.png)](https://gyazo.com/df3d872e452cad2660d33c138628da31)
ただ私の場合はこれだけでは機能しませんでした。少し時間をかけて調べてみると以下の画像のように設定を加えたら解決しました。
[![Image from Gyazo](https://i.gyazo.com/3abf751346c6b0f43940df644fbbff8b.png)](https://gyazo.com/3abf751346c6b0f43940df644fbbff8b)
ちなみに**setting.json**へ直接記述しても設定は変更できます。
“`

Rspecでのdevise_token_authの認証テストがうまくいかなかった

こんばんは

QiitaでRspec/devise_token_authで[調べて出てきたの](https://qiita.com/mtoyopet/items/ed1bd4b9c1544d401880)を参考に認証が通った状態でpostができるかのテストをしてみたところ、詰まったのでここに書き残しておきます
# 認証エラーの起きたテストコード
“`Ruby:authorization_spec_helper.rb
module AuthorizationSpecHelper
def sign_in(user)
post api_v1_user_session_path,
params: { email: user[:email], password: user[:password] },
as: :json

response.headers.slice(‘client’, ‘access-token’, ‘uid’)
end
end

“`
まずQiitaの記事を参考に、サインインしたときにレスポンスのclient,access-

RailsでREST API設計するときに知っておきたい集

## RESTについて

– RESTとは
– Representational State Transfer。WebAPIの共通仕様、アーキテクチャスタイル。またはそれを用いたシステム。
– RESTfulとは
– RESTの設計原則に従ったシステムのこと。

[Representational State Transfer – Wikipedia](https://ja.wikipedia.org/wiki/Representational_State_Transfer)

### RESTの設計原則

#### 1. ステートレス(Stateless)

– サーバ側で状態の管理を行わない。
– クライアントが送信するHTTPリクエストには、サーバがそのリクエストを処理するために必要な情報が全て含まれており、以前のリクエスト情報にも依存しない。
– セッション情報を保持しない。
– だが、クッキー等によるセッション状態の管理を行なっているシステムもRESTfulと呼ばれる。

#### 2. 統一インターフェース(Uniform Interface)

Rubyのぼっち演算子について

# ぼっち演算子`&.`

「レシーバがnilのときに起こるエラーを回避するため」に`.`の代わりに` &.`を使います。
レシーバがnilでもエラーにならず、nilを返してくれます。

“`ruby
user = User.new
user.name # => “ユーザー名”

object = nil
object.name # => NoMethodError
object&.name # => nil
“`

ifや三項演算子でも書くことができます。

“`ruby
# ifを使った書き方
name = if object
object.name
else
nil
end

# 三項演算子を使った書き方
name = object ? object.name :nil
“`

【Rails 6】片方の選択によってもう片方のオプションの値が変化する動的なセレクトボックスを作る

## 概要

タイトル通りのものを作ります。文字だけだとわかりにくかったら、次の完成イメージを見てください。

## 完成イメージ

![タイトルなし.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/63098019-e563-05c7-934f-2f6811b17010.gif)

## 仕様

– Ruby 3
– Rails 6
– MySQL 5.7
– Bootstrap 5
– Docker

※ Bootstrap はバージョン5から JQuery が不要になり導入方法が少し変わったのでご注意ください。

## 下準備

まず最初に下準備から始めていきます。

### 各種ディレクトリ & ファイルを作成

“`
$ mkdir rails-dynamic-selectbox && cd rails-dynamic-selectbox
$ touch Dockerfile docker-compose.yml entrypoint.sh Gemfile Gemfile.loc