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

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

単体テストの下準備 手順

※著者がiMacユーザーの為、
コマンドは「ターミナル」で実行するものとして記述しています。

Ruby on Railにおける
単体テストの手順をまとめます。

1. gem ‘rspec’インストール
2. rails g rspec:install
3. .rspecに–format documentation
4. rails g rspec:model モデル名

#1. gem ‘rspec’ インストール

Gemfileに記述後、コマンドでbundle installをかけます。

注意点は、Gemfileの行末ではなく
group :development, :test do
の箇所に記述するところ。

“`ruby:Gemfile
group :development, :test do
# Call ‘byebug’ anywhere in the code to stop execution and get a debugger console
gem ‘byebug’, platforms: [:mri, :mingw, :x64_mingw]

元記事を表示

【Ruby on Rails】退会機能をgemなしで実装する方法

#対象者

* 退会機能を実装予定の方

#目的

* 退会機能を実装して退会後、ログイン出来ないようにする

#実際の手順と実例
###1.deviseの導入

User認証で新規登録とログインを行うためにdeviseを導入します

https://qiita.com/nao0725/items/83c73c417be01913a857

“`Gemfile.
gem ‘devise’
“`

““Terminal.
$ bundle install
$ rails g devise:install
$ rails g devise user name:string is_valid:boolean #①
$ rails g devise:views
““

①で退会したかどうかを判断するカラムを作成しています。
booleanは真偽のどちらの値なのかを決めるデータ型です。

Rubyでbooleanの判定を行う方法を現役エンジニアが解説【初心者向け】

boolean型はデフォルト値を設定する必要があるので、マイグレーションファイルを編集します。

“`db/mi

元記事を表示

トランザクションとは。

# はじめに
本記事では、トランザクションについて記述しました。
トランザクションとはなんですか?
と聞かれた際に、私は何も答えることができませんでした。
悔しかったので調べました。

# トランザクションとは
`レコードの更新を行う複数の処理を1つにまとめて行うこと`を指します。

トランザクションを利用することにより、
「処理の一部は成功し、一部は失敗した」という事象は発生せず、
`すべての処理の成功または失敗のみの状態`を作ることができます。

### Railsではこのような利用

“`ruby
ActiveRecord::Base.transaction do
処理1
処理2
処理3

end
“`
ここに処理1、処理2…を1つのまとまりとして記述することで、
処理が1つでも失敗すれば、全体としての処理は失敗ということになります。

# トランザクションのACIDプロパティー
以下を参照しています。
トランザクションは、銀行のATMに例えることが多いみたいです。
かなりわかりやすいので勝手にオススメです。
[トランザクションの ACID プロパテ

元記事を表示

[rails] nginx + unicorn + mysql (aws EC2 RDS) production環境立ち上げ時のメモ

#はじめに

初心者がRailsチュートリアルのやり方を~~無視~~アレンジして無謀にもAWSでデプロイしたためにエラー地獄にハマった軌跡をメモとして残しました。
(ミドルウェアもチュートリアルと変えてます。WEBサーバー:nginx + unicorn、DB:mysql(RDS))

#参考記事
「rails aws」で検索して上位に出てきた [こちら](https://qiita.com/naoki_mochizuki/items/5a1757d222806cbe0cd1 ”世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで”)の記事を参考(めちゃくちゃ助かりました。)

#環境
Rails 6.0.3
ruby 3.0.2
unicorn v6.0.0
nginx/1.20.1
mysql 8.0.2

#unicorn.rb
`listen`のパスを`{app_name}/tmp/unicorn.sock` に変更する(pidも同様)。[こちら](https://zenn.dev/noraworld/articles/deploy-rails-ap

元記事を表示

Rails mapメソッドとchartkickでグラフを量産する

# はじめに
こんにちは。
Rails6アプリケーションでgem”chartkick”とmapメソッドを使って、対応するデータのグラフを自動的に量産する方法について解説します。
Rails5をお使いの方はchartkick導入時のコマンドが変わるらしいので[公式サイト](https://chartkick.com/)を参考にしてください。

# chartkickの導入
まず以下のようにgemfileにchartkickを追記します。

“`ruby:gemfile.rb
gem “chartkick”
“`
その後いつも通りbundle installします。
yarn addコマンドでWebpackerを走らせて依存オブジェクト(cahrtkick)の追加とインストールを行います。( [yarn add の解説](https://classic.yarnpkg.com/en/docs/cli/add) )

“`zsh:terminal
bundle install
yarn add chartkick chart.js
“`
最後に、javascript:app/java

元記事を表示

pathの引数について

Rspecでテストを書いているとき、下記の実装に関してpathの引数に`task.project`が使われていることに疑問を感じておりました。

“`ruby
describe ‘Task詳細’ do
context ‘正常系’ do
it ‘Taskが表示されること’ do
visit project_task_path(task.project, task)
#project_task_path(project, task) ではだめなの?
expect(page).to have_content(task.title)
expect(page).to have_content(task.status)
expect(page).to have_content(task.deadline.strftime(‘%Y-%m-%d %H:%M’))
expect(current_path).to eq project_task_path(task.project, task)
end
end

元記事を表示

【Rails】N+1問題についてのまとめ

#N+1問題とは?

N+1問題とは、データベースからデータを取り出す際に、大量のSQLが発行されてパフォーマンスが低下してしまう問題のことです。

__N+1問題の具体例__

railsではallメソッドやfindメソッドを使ってデータベースからデータを取得しています。
ターミナルのログを見ると実際には下のようにその都度SQLが実行されています。

“`SQL:SQL
Product Load (2.7ms) SELECT `products`.* FROM `products`
“`
__usersテーブル__

| id | name |
|:-:|:-:|
| 1 | 山田 |
| 2 | 新井|
| 3 | 田中 |
| 4 | 北川|

__productsテーブル__

| id | product | group_id|
|:-:|:-:|:-:|
| 1 | カレー | 2 |
| 2 | 魚 | 1 |
| 3 | 焼肉 | 3 |
| 4 | 刺身 | 1 |

「1人のuserは複数のproductsを持つ関係なので、Userモデル

元記事を表示

【Rails】Sprockets::DoubleLinkErrorを解消する

###1.背景
Ruby on Railsを使用して共同開発を行っています。
他の方の実装分を追加後、`rails s`でサーバーを起動すると表題のエラーが表示されました。

今回はエラー解消の手順と原因を備忘録としてまとめます。

###2.環境
– mac.os バージョン10.15.6
– Ruby 2.7.3
– Rails 6.1.3.1
– psql (PostgreSQL) 12.6

###3.該当のエラーと原因
今回のエラーは下記です。

“`ruby
ActionView::Template::Error (Multiple files with the same output path cannot be linked (“top.css”)
In “/Users/hogehoge/rails/team_p

元記事を表示

【第13章】Railsチュートリアルでheroku pg:reset DATABASEを実行時に警告がでる

[Railsチュートリアル第13章(第6版)](https://railstutorial.jp/chapters/user_microposts?version=6.0#code-micropost_model_image_validation)で、herokuでレコードを削除する際に手間取ったので備忘として記録する。

#①heroku pg:reset DATABASEを実行すると警告がでる
チュートリアル終了時にherokuのDBをリセットしようとすると、“`Warning: Cannot open browser“`が表示されて実行されない。

#②解決方法
“`heloku login –interactive“`を実行すると、正常にログインできる。
参照:https://qiita.com/yadon/items/db3ec786ec410990cec6

#③再度heroku pg:reset DATABASEを実行
表示されるメッセージ通りに入力すれば、成功する。
参照:https://qiita.com/kakiuchis/items/5597354b1

元記事を表示

廃棄PCのantix上にrubyonrails環境構築テスト

# rubyonrails-test

* 家の廃棄予定のノートPC(Pentium)にantixをいれて、rubyonrails+node.js環境構築のテスト
* rubyは新しいものがいれられなかったため、2.6.3をビルドしている
* 結論:nodeがうまくいれられずに断念

## 環境構築 mac

* VSCode拡張
* Ruby
* HTML Snippets

* Rubyのインストール

“`zsh
# update
brew update

# rbenv
brew install rbenv ruby-build
echo ‘eval “$(rbenv init -)”‘ >> ~/.bash_profile
source ~/.bash_profile

# readline
brew install readline
brew link readline –force

# ruby
RUBY_CONFIGURE_OPTS=”–with-readline-dir=$(brew –prefix readline)”
# install rub

元記事を表示

Rails + React 画像読み込み方法

## 手順

1. 画像ファイルを app/assets/images へ配置
2. config/webpacker.yml に追記
3. jsx ファイルに Component を作成

### 1. 画像ファイルを app/assets/images へ配置

適当な画像ファイルを“`app/assets/images“`へ配置します。

### 2. config/webpacker.yml に追記

“`ruby:config/webpacker.yml
# Additional paths webpack should lookup modules
# [‘app/assets’, ‘engine/foo/app/assets’]

# resolved_pathsを下記のように変更
resolved_paths: [“app/assets/images”]
“`

### 3. jsx ファイルに Component を作成

“`jsx:test.jsx
import Image from ‘test.png’;

export de

元記事を表示

エラー【Module not found: Error: Can’t resolve ‘@popperjs/core’】が分からんかった

Rails6でwebpackerを起動したときに出たエラー

“`ruby
% bin/webpack-dev-server

ERROR in ./node_modules/bootstrap/dist/js/bootstrap.esm.js
Module not found: Error: Can’t resolve ‘@popperjs/core’ in ‘/Users/username/hoge_app/node_modules/bootstrap/dist/js’
“`
入れているBootstrap5とpopperjsを使っている場合、入れ方の問題のよう。
yarnでBootstrapを入れているときは確認しておきたい

`% yarn add @popperjs/core`

Bootstrap5でpopperjsを使うときは上のコマンドで入れてからwebpackerを立ち上げたら無事立ち上がった。

https://yarnpkg.com/package/@popperjs/core

元記事を表示

Gemfileで使われる「~>」とは

#「~>」とは

今後のバグ修正のみ受け入れたい場合に使用する。

“`
# 6.1.3以上、6.2.0未満
gem ‘rails’, ‘~> 6.1.3’
“`

“`
# 4.1.0以上、5.0.0未満
gem ‘puma’, ‘~> 4.1’
“`

#参照
https://yu8mada.com/2018/04/22/what-does-tilde-greater-than-sign-mean-in-gemfile/

https://qiita.com/awakia/items/5745938c192ca1139c63

元記事を表示

masterブランチで作業してしまった時の対処法

####<手順>

1, まずは修正内容を確認する。

“`bash
$ git status #ターミナルに作業した内容、変更した内容が出てくる
“`

2, 修正内容を別の場所に一時保管する。

“`bash
$ git stash
“`

その後もう一度`git status`をすると先ほどの修正内容はなくなり、ターミナルに下記のような文章が出るはず。

“`bash
On branch master
Your branch is up to date with ‘origin/master’.

nothing to commit, working tree clean
“`

3, 本来作業をしたかったブランチに切り替えorブランチ作り切り替える。

“`bash
git checkout -b ○○○
“`

4, 一時保管していた内容を切り替えたブランチに適用する。

“`bash
git stash apply
“`

元記事を表示

プルリクエストでコンフリクトが発生した際の対処法

#そもそもコンフリクトとは?

直訳すると「衝突」という意味。

ファイル上で「自分の作業」と「他人の作業」が重複してしまった状態のことを指す。
 

#発生原因

「同一ファイル」の「同一箇所」を複数人が編集した状態でマージした時に発生する。

また、ローカルブランチをpushした後にmasterブランチに変更を加えてしまうことでも発生する。
 

#`git pull –rebase` を使った対処法

###<手順>

1, masterブランチを最新にして、作業ブランチをチェックアウト

“`bash
$ git checkout master
$ git fetch origin
$ git pull origin master
$ git checkout [作業ブランチ]
“`

2, 作業ブランチに対してmasterブランチをrebaseする

“`bash
$ git pull –rebase origin master
“`

3, コンフリクトがあれば直す

“`bash
error: Failed to merge in the changes.

元記事を表示

保守運用の際に既存メソッドの定義場所を調べるメソッド[Ruby, Rails]

## 想定

1. 既存のアプリの改修を担当することになった
2. 独自に定義されているメソッドについて、どこで定義されているか知りたい

## 結論

**メソッドがどこで定義されているか調べるメソッド**

“`ruby
method(“メソッド名”).source_location
#=> [“/Users/user_name/dir1/dir2/app/helpers/application_helper.rb”, 78]
# これが定義場所
“`

## 使い方

このメソッドは、`binding.pry`を用いたデバッグ中やrailsコンソール時などに用いることが可能です。(恐らく

以下では、`binding.pry`を用いたデバッグを用いて、メソッドの定義場所を調査しています

“`html:app/views/layouts/application.html.erb



:


<%= flash_messages %>
<% binding.pry %>
<

元記事を表示

Railsのアクションについて

基本的事項の復習。
#1. Railsにおける7つのアクション
|アクション|役割|HTTPメソッド|
|–|–|–|
|index|リソースの一覧を表示する|get|
|new|リソースの新規作成|get|
|create|リソースを新規作成して保存する|post|
|show|記録されたリソースの詳細表示|get|
|edit|リソースの編集|get|
|update|リソースの更新|patch/post|
|delete|リソースの削除|delete|
#2. newとsaveの違い
newのコマンドはリソースの生成のみを行うので、このままではDBに反映するにはsaveのコマンドの実行も必要になる。
createは生成して保存を行うため、イメージとしてはnew+saveというアクション。

元記事を表示

【Rails】rails s するとA server is already running.が発生する

#はじめに
表題の通りですが、rails sするとA server is already running.となってしまい、serverが立ち上がりませんでした。

“`
$rails s
=> Booting Puma
=> Rails 6.0.4 application starting in development
=> Run `rails server –help` for more startup options
A server is already running. Check /home/ec2-user/environment/all-mng/tmp/pids/server.pid.
Exiting
“`

#解決策
logに出てました。

“`
A server is already running. Check /home/ec2-user/environment/all-mng/tmp/pids/server.pid.
“`
となっているので、
server.pidを一度削除して、rails sすると解決しました。

#参考記事
[A serve

元記事を表示

共同開発

インターン生で共同開発をしようという提案が通り、レシピを投稿する簡単なサービスを開発しました。共同開発したサービスの概要、過程、利用したツール等についてまとめていきます。

##メンバー
僕を含めた3人(特に分野を決めていませんでしたが、結果的に僕が開発、他2人が設計中心になりました。「[特に苦労したこと](#特に苦労したこと)」)

# サービス概要
### Food Frofessor
レシピを投稿し、編集、お気に入り登録、コメントができる基本的なサービスです。
[特に苦労したこと](#特に苦労したこと)の経緯や、「共同開発」を経験するといった目的が理由でそこまでハイレベルなサービスにしませんでした。
![food_frofessor-top.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/848640/f9de6ff9-4f5b-f941-f34e-951d0b92e165.png)

URL: https://food-professor.herokuapp.com/top (初回のみデータの読み

元記事を表示

【Rails】PV数閲覧数機能(メモ)

#やり方

まず`Gemfile`に`impressionist`を追記。

“`ruby:Gemfile
gem ‘impressionist’
“`

“`:ターミナル
$ bundle install
“`
次に`impressionist`テーブルを作成します。
 

“`:ターミナル
$ rails g impressionist
“`

マイグレーションファイルが生成されるので`rails db:migrate`をします。

“`ruby:
class CreateImpressionsTable < ActiveRecord::Migration[6.1] def self.up create_table :impressions, force: true do |t| t.string :impressionable_type t.integer :impressionable_id t.integer :user_id t.string :controller_name t.st

元記事を表示

OTHERカテゴリの最新記事