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

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

[Ruby]any?を||の代わりに使わない

Rubyの配列(Array)には`any?`という便利メソッドがあります。

https://docs.ruby-lang.org/ja/latest/method/Array/i/any=3f.html

> すべての要素が偽である場合に false を返します。真である要素があれば、ただちに true を返します。
ブロックを伴う場合は、各要素に対してブロックを評価し、すべての結果が偽である場合に false を返します。ブロックが真を返した時点で、ただちに true を返します。

上記はドキュメントから転記しました。
any?を使うことで、配列内に特定の条件を満たした要素が1つ以上あること(または存在しないこと)を確認することができます。
また、真の要素が見つかったら以降の判定は行われないと記載されているため計算効率も良いです。

簡単に動作確認をしてみます。
配列`[5, 3, 4]`の中に3以下の数値があるかをチェックしています。
何が判定されたか可視化できるように判定ごとに`p _1`で判定した要素を出力するようにしています。

“`irb
irb(main):005:

元記事を表示

I18n機能 日本語化対応

1.デフォルト言語の設定

デフォルト言語を日本語に変更するため、下記のコードを`config/application.rb`に追加

“`ruby:config/application.rb
module I18nApp
class Application < Rails::Application config.i18n.default_locale = :ja # 追加 end end ``` 2.ja.ymlの作成 ![スクリーンショット 2021-10-13 230300.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273803/0df3ff68-b2c4-d1e5-4990-ffcbe93b2f25.png)

元記事を表示

ある日MySQLが急に動かなくなった時のデバッグ( The server quit without updating PID file )

#はじめに
ある日突然、rails s でエラーが発生したので解決した方法を記録します。
誰かの参考になることを祈ります。

#開発環境
– macOS BigSur 11.6
– zsh: 5.8 (x86_64-apple-darwin20.0)
– Ruby: 2.6.3
– Rails: 6.1.4.1

#発生したエラー
localhost:3000: ![Access denied for user ‘root’@’localhost’ (using password: NO)](https://kitsune.blog/wp-content/uploads/access-denied.png “”)

“`zsh:
$ mysql.server start

#出力
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/*******.local.pid).
“`
その後、brew doctor、アクセス権限の再付与、エラーログのファイルを覗いて対

元記事を表示

Rails x Herokuでheroku run rails db:migrateした時にError: Duplicate column name “email”となった時の対処方法

# エラー内容
`git push heroku master`して`heroku run rails db:migrate`したら以下エラーが発生

~~~
Mysql2::Error: Duplicate column name ‘email’
~~~

↓このファイルがおかしいとのこと

~~~db/migrate/20211003044016_add_email_to_inquiries.rb
class AddEmailToInquiries < ActiveRecord::Migration[6.1] def change add_column :inquiries, :email, :string end end ~~~ ↓追加先テーブルを見たらすでにemailが追加されている ~~~db/migrate/20211002233717_create_inquiries.rb class CreateInquiries < ActiveRecord::Migration[6.1] def change create_table :inquir

元記事を表示

Rails 既存カラムにdefault オプションを追加

##1.使用環境
mac.os Catalina バージョン10.15.7

Ruby 3.0.1
Rails 6.0.4.1
psql (PostgreSQL) 13.4
node 14.18.10
npm 7.24.0

##2.既存のカラムにdefaultオプションついか

1.追加用のテーブルを新たに作成します
usersテーブルのadminカラムに追加する例です。

“`
rails g migration change_admin_to_users
“`

2.
先ほど作成したdbファイルに
#####change_column :テーブル名,  :カラム名,  :データ型, null: false, default: false

“`d
class ChengeAdminToUsers < ActiveRecord::Migration[6.0] def change change_column :users, :admin, :boolean, null: false, default: false end

元記事を表示

実務未経験が実務案件にトライ! その顛末やいかに?

実務未経験者である私ですが、この度なんと実務案件に挑戦する機会をいただきました。その時の経験や学び、成果をここに記しておこうと思います。私と同じような境遇の人のみならず、さまざまな方にご覧いただけると非常にうれしいです。

#自己紹介
Over30の方のアラサー。未経験からエンジニアへの転職を目指しています。Techacademyでバックエンドとフロントエンド、ウェブデザインを学んだ後、Rails Tutorialやその他書籍を通じて勉強していました。

今回の実務案件に参加する前は、AWS等のインフラの知見は一切ありませんでした。しかし、「30歳を過ぎている場合、最低レベルでも実務レベルじゃないとエンジニア転職できないだろう」との思いで日々学習に励んでいたところ、本案件の募集があったため即応募。熱意が認められたのか、本案件を受注することができました。

#案件の概要
運営中のWEBサービス「独学エンジニア」のKPIモニタリング体制の整備が今回の案件となります。

状況を説明しますと、運用中のWebサービスであるにもかかわらずデータ分析アプリ・ツールが全く導入されておらず、新規登録者数

元記事を表示

current_userとcorrect_userの違い

こんにちは!テックアカデミーのWebアプリコースを受講している駆け出し高校生エンジニアの安田駿介です。

今回は、「current_userとcorrect_userの違い」というテーマで解説していきます。

#current_user
現在ログインしているユーザを取得するメソッド

#correct_user
そのレコードを本当にログインユーザの所有しているものかを判別するメソッド
レコードの編集、更新、削除など、持ち主しかやってはいけない機能を作るときによく使います。

#まとめ
current_userとcorrect_userは、JavaとJavaScriptのように、全く違うメソッドです。

#開発環境
・Cloud9
・Ruby 3.0.0
・Rails 6.1.3.1

元記事を表示

比較演算子と論理演算子について!

#①.比較演算子(>, >=, <, <=, ==) 比較演算子は、値同士を比較したいときに使用します! 書き方はシンプルで、値と値の間に演算子を記述するだけです! 以下のようになっています! ```php 比較演算子 使い方 説明 > A > B AはBより大きいか
>= A >= B AはB以上か
< A < B AはBより小さいか <= A <= B AはB以下か == A == B AとBは等しいか ``` 比較演算子を使った場合、その条件が正しいかどうかによって、 trueもしくはfalseと呼ばれる値になります! 下記が例となっています! ```php # 1は20より小さいか? irb(main):001:0> 1 < 20 => true

# 5は5以下か?
irb(main):002:0>

元記事を表示

<%= render 'パーシャルのパス', パーシャルで使う変数名: 変数に代入する値 %>

<%= render 'パーシャルのパス', パーシャルで使う変数名: 変数に代入する値 %>

元記事を表示

undefined method “〇〇” for nil:NilClassのエラーの原因を実例を元に解説

こんにちは!テックアカデミーのWebアプリコースを受講している駆け出し高校生エンジニアの安田駿介です。

今回は、「undefined method “〇〇” for nil:NilClassのエラーの原因を実例を元に解説」というテーマで解説していきます。

#エラー内容
![4f9235c41d32c38c65ec88904178410f.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1903726/843cc005-41e2-1c60-a4c8-f617e99d611e.png)

#解説
このエラーは、nilが〇〇を呼び出そうとしているからエラーになっています。

nil.each ~
という状態です。

今の状態だと、記載してあるはずの@cabinetsがnilになっています。

つまり、@cabinetsメソッドが未定義ということになります。

この場合だと、@cabinetsはcontroller#indexに記載するはずですが、それが記載していないということでした。

#開発環境
・Clo

元記事を表示

[Rails] テーブル間にテーブルを作成し設定する方法

##初めに
####なぜこの記事を書きたかったのか or この記事の対象者
**テーブルとテーブルの間のテーブルの設定と仕組みが未だに自信ないから一度言語化させたかった。**
**特に理解が追いつけないのが、テーブル間のテーブルの設定になぜ別のモデルを作成しなければならないのか。**

####環境
**・Macbook Air (Retina, 13-inch,2019)**
**・プロセッサ 1.6GHz デュアルコアIntel Core i5**
**・メモリ 8GB 2133 Mhz LPDDR3**
**・MacOS Big Sur バージョン 11.5.2**

####記事の目次
**1)フリマアプリを使って言語化してみる!**
**2)[したいこと]**
**3)[need1→how1]必要なテーブルの作成**
**4)[need2→how2]viewで記入欄の作成,controllerで各アクションの設定**
**5)[need3→how3]modelの設定**
**6)[need4→how4]viewで置き場所の設定**
**7)最後に**

##フリマアプリを使っ

元記事を表示

【RSpec】実行日時によってテストの挙動が変わってしまうテストはtravel_toを使おう

##環境
Ruby 3.0.2
Rails 6.1.4.1

##travel_toメソッド

travel_toブロックの中だけは指定した日時でテストを実行できる。

rails_helperの設定も忘れずに

“`rails_helper.rb
RSpec.configure do |config|
config.include ActiveSupport::Testing::TimeHelpers
end
“`

“`ruby
context ‘travel_toメソッドテスト’ do
travel_to Time.zone.local(2021, 1, 1) do
p Date.today #=> Fri, 01 Jan 2021
end
end
“`

##参考

https://api.rubyonrails.org/v5.1.7/classes/ActiveSupport/Testing/TimeHelpers.html

元記事を表示

docker環境でvscodeのrubocop拡張が反応しない時の対処法

# はじめに
vscode の rubocop 拡張 [ruby-rubocop](https://marketplace.visualstudio.com/items?itemName=misogi.ruby-rubocop) を Docker 環境で使用したところかなり詰まったのでその備忘録です。

ホストに rubocop をインストールすれば良いという記事が散見されましたが、根本的な解決になっていません。ここではホストを汚さずコンテナ内の rubocop を参照するような解決方法をあげます。

一人でも多くの方の参考になれば幸いです。

# 何も設定していない時のエラー ( rubocop 拡張入れただけ)
“`
command /Users/horisho/.rbenv/shims/rubocop returns empty output! please check configuration.
“`
ホストに rubocop は存在しないので、 docker コンテナに実行先を向けないといけません。

# 初期設定
https://github.com/misogi/v

元記事を表示

Rails の finder 系メソッドをちゃんと理解する

# はじめに
普段空気のように finder 系メソッドを使っているけれど、改めて finder 系メソッドは何があったっけ?というのと内部実装について見ていき、何となくしか理解していない部分をちゃんと理解したいと思います。

# finder 系メソッドの整理
今回は 2001/10/09 時点の最新の安定バージョン `v6.1.4.1` のソースを元に書いていこうと思います。

finder 系メソッドは

– https://github.com/rails/rails/blob/v6.1.4.1/activerecord/lib/active_record/core.rb
– https://github.com/rails/rails/blob/v6.1.4.1/activerecord/lib/active_record/relation/finder_methods.rb

あたりに詰まっています。

`core.rb` の方は `Person.find(1)` のようにモデルのクラスメソッドとして呼び出す場合で、 `finder_methods.rb` の方は `Pe

元記事を表示

Rails N+1問題への対処

## 課題
RailsのActiveRecordはRubyでデータベースとの問い合わせができる便利なツールである一方、発行されるSQLを意識しなくても済んでしまうため、効率の悪いクエリを発行していても気づかない危険性があります。Railsにおいては特にN+1問題という必要以上にデータベースに問い合わせをしてしまい、パフォーマンスを低下させてしまう問題がよく知られています。

## N+1問題とは?
N+1問題とは、「ループ処理の中で都度SQLを発行してしまい、大量のSQLが実行されパフォーマンスが低下する」という問題のことです。100件あれば100回、1000件あれば1000回、ループ処理の中で問い合わせすることになるので、いかにも非効率的です。馬鹿馬鹿しい初歩的なミスに聞こえますが、Railsを使用していると往々にしてこの問題が生じます。

では具体的なN+1問題の例を見ていきましょう。
まず、usersテーブルとpostsテーブルがあると仮定しましょう。

__groupsテーブル__

| id | name |
| —- | —- |
| 1 | A |

元記事を表示

Docker × rails6 × mysql8.0 環境構築

windowsで開発進めていたがMacbook(intel)買ったので改めて環境構築した。

# ファイルを作る

dockerfile

docker-compose.yml

entrypoint.sh

Gemfile

Gemfile.lock(空)

ファイルの書き方は公式ドキュメントを参考。
新しい技術にチャレンジする時ってqiitaに頼りがちだけど、とりあえず公式ドキュメント見てみる事を最近覚えました。

[https://docs.docker.com/samples/rails/](https://docs.docker.com/samples/rails/)

# railsアプリを作成

ターミナルで

“`ruby
docker-compose run web rails new . –force –database=mysql
“`

(— **force は既存のGemfileを上書きする)**

実行。

railsアプリができる。

Gemfileやdocckerfileが更新されているので、

“`ruby
docker-comp

元記事を表示

railsチュートリアル第七章 flash

###flash
ユーザー登録フォームが実際に動くようになった。
それにより登録することができるよになった。
登録完了後に表示されるメッセージを二度目以降に表示させないようにさせる。
それを使うには
“`flash“`という変数を使う。 ハッシュのように使う。
####ユーザー登録ページにフラッシュメッセージを追加する
app/controllers/users_controller.rb

“`rb
class UsersController < ApplicationController . . . def create @user = User.new(user_params) # 外部メソッドを使う if @user.save # 保存の成功をここで扱う。 flash[:success] = "Welcome to the Sample App!" # 成功時一度だけ表示されるメッセージ redirect_to @user # urlを指定して表示する # 保存成功したらu

元記事を表示

railsチュートリアル第七章 ユーザー登録成功

##ユーザー登録成功
新規ユーザーを実際にデータベースに保存できるようにし、ユーザー登録フォームを完成させる。
ユーザー情報は自動的にデータベースに登録させる。
ブラウザの表示をリダイレクトして、登録されたユーザーのプロフィールを表示
ウェルカムメッセージも表示させる。

###登録
“`rb
require ‘test_helper’

class UsersSignupTest < ActionDispatch::IntegrationTest test "invalid signup information" do get signup_path # signupのページにアクセス assert_no_difference 'User.count' do # ユーザー数が変わらないかをテストする post users_path, params: { user: { name: "", # ハッシュのハッシュのようになっているように見える

元記事を表示

railsチュートリアル第七章 失敗時のテスト

###失敗時のテスト
有効、無効のデータどちらでも正常にアプリが動くようにする。
アプリケーションの変更をするたびにテストを繰り返さなければならず大変である。
Railsではフォーム用のテストを書くことができ、こういったプロセスを自動化することができる。

今回は無効の送信をした時に正しい振る舞いについてテストを書いていく。

####新規ユーザー登録用の統合テストを生成する
統合テストのファイル名はusers_signup

“`
rails generate integration_test users_signup
“`

####無効なユーザー登録に対するテスト
test/integration/users_signup_test.rb

“`rb
require ‘test_helper’

class UsersSignupTest < ActionDispatch::IntegrationTest test "invalid signup information" do get signup_path # signupのページにアクセス

元記事を表示

Railsチュートリアルでbundle installがうまくいかないときは

# 簡潔にまとめます
– railsのバージョンやGemfileでのバージョン指定を確認しましょう
– エラーログで検索してみましょう
– Gemfileのバージョン指定を変更してみましょう

# 概要
ローカル環境でRailsチュートリアル6版の2週目に挑戦中です。3章まで終わりましたが、Gemfileの内容を更新した後のbundle install / updateが度々エラーになります。対処法と原因についてまとめてみます。

以下は今回出てきたエラーの一例です。

“`
$ bundle update

Fetching gem metadata from https://rubygems.org/…………
Resolving dependencies…
Bundler found conflicting requirements for the Ruby version:
In Gemfile:
Ruby

guard (= 2.16.2) was resolved to 2.16.2, which depends on

元記事を表示

OTHERカテゴリの最新記事