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

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

ルーティングのネストについて!

#①.結論!

ネストは、ある記述の中に別の記述をして、親子関係を示す方法です!

「入れ子構造」とも呼ばれます!

ルーティングにおけるネストとは、あるコントローラーのルーティングの中に、別のコントローラーのルーティングを記述することです!

ルーティングをネストさせる一番の理由は、アソシエーション先のレコードのidをparamsに追加してコントローラーに送るためです!

例を見ながら解説していきます!

#②.記述について!

下記が記述の形になります!

“`php:routes.rb
Rails.application.routes.draw do
resources :親となるコントローラー do
resources :子となるコントローラー
end
end
“`

ルーティングでネストを利用すると、アクションを実行するためのパスで、親子関係を表現できます!

例えば、eats_controller.rbのルーティングの中にcomments_controller.rbのルーティングを記述します!

ネストを利用したときに設定されるルーティングの例を見てみま

元記事を表示

rspecで ActionView::Template::Error:に遭遇した!

メール送信機能を追加した後に、いつも通りプルリクだして自動テストの結果を待ってた
rspec関連は今回いじってなかったのでエラーの通知がslackに飛んできてびっくりし^^;

エラー内容

“`
2) PostProduct valid if post_id is different
Failure/Error:

<%= link_to 'クリックして登録を完了する', controller: 'users/confirmations', action: 'create', confirmation_token: @token %>

ActionView::Template::Error:
Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true
“`

exampleは16作っているのですが、出たエラー全てこれでした。

エラーに

元記事を表示

【Rails】EC2サーバーのエラーログを確認する方法

先日unicornの自動デプロイでエラーが起き、解決に時間がかかってしまったため、エラーログで素早く原因究明するための手順を備忘録としてアウトプットしていきます。

#前提条件(本番環境)
・仮想OS:AWS(EC2)
・WEBサーバ:Nginx
・アプリケーションサーバ:unicorn
・データベース:MariaDB

# エラーログを確認する際の注意点
※unicornでエラーが起きた場合の、エラーログの確認場所はすでに自身で設定しているはずです。
 そのため人によってディレクトリ名が異なる場合があります。以下を確認しましょう。

“`config/unicorn.rb
(省略)

#エラーのログを記録するファイルを指定
stderr_path “#{app_path}/log/unicorn.stderr.log”

(省略)
“`

# エラーログを確認する手順
※個人情報保護の観点から、一部コードを改変しています。
※ここでは分かりやすいように`lsコマンド`を使って、適宜ディレクトリの中身を確認しています。

“`
ユーザー名@PC名 ~ % cd .ssh/
ユーザ

元記事を表示

【RSpec】重複するテストコードを共通化しよう

重複するテストコードはshared_contextやshared_examplesで共通化できる

##rails_helperの設定

下記の記述のコメントアウトを外す

“`spec/rails_helper.rb

Dir[Rails.root.join(‘spec’, ‘support’, ‘**’, ‘*.rb’)].sort.each { |f| require f }

“`

↑を忘れると下記のエラーで怒られる

“`
ArgumentError:
Could not find shared context “hogehoge”
“`

##shared_contextで重複するコードをまとめる

spec下にディレクトリを作成して共通化したい処理を記述

“`spec/support/contexts/login_setup.rb
RSpec.shared_context ‘login setup’ do
before do
Rails.application.env_config[“devise.mapping”] = Devi

元記事を表示

RailsとTiDBの統合について

![shutterstock_1043482054.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1487691/524a55d6-154e-ea40-76de-66584c740def.png)
*この記事は [dev.to](https://dev.to/hooopo/getting-started-with-rails-tidb-4pni)で発表されたものです。*

このチュートリアルは、RailsとTiDBの統合に関する、おそらくWebで初めてのチュートリアルです。TiDBは、水平的なスケーラビリティ、高可用性、MySQLとの互換性を特徴とする、オープンソースの分散SQLデータベースです。

初心者にとって、ActiveRecordのような複雑なORMをTiDBに統合するのは難しい可能性があります。Web上にはこのトピックを扱っている記事がほとんどないことから、私はRailsユーザーによるTiDB導入を支援するために、このチュートリアルを執筆しました。

## TiDB開発環境をローカルで構築す

元記事を表示

[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:

元記事を表示

devise ストロングパラメータの仕組みを調べてみた。

##はじめに
サインアップページにdeviseのデフォルトで許可されている要素ではない、”username”を追加することになり、deviseでのストロングパラメータの設定方法を調べた時のことを備忘録として投稿します。

##ストロングパラメータとは
**特定のパラメーターのみを許可することで、モデルへの不正なパラメータの流入を防ぐ仕組みのこと。**MassAssingment脆弱性というセキュリティ上の問題に対処するための仕組みとしてRails4系から導入されましたものです。

deviseにおいては、モデルにパラメータを送ることのできるアクションは、3つに限定されており、パラーメータも以下のように限定されています。

|action| allowed params|
|:-:|:-:|
|sign_in | authentication keys |
|sign_up | authentication keys, password,password_confirmation |
|account_update| authentication keys,password, pa

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事