- 1. renderとredirect_toによる画面遷移について
- 2. カラム追加、削除コマンド
- 3. RDBのユニーク制約とRailsのユニークバリデーションの違いを理解しよう
- 4. 【JavaScript】プレビュー機能の実装
- 5. Gemのバージョン指定
- 6. あなたは知っている?Rubocop に教えてもらった Ruby の小ネタ5つ
- 7. RubyからJavaに移行する時の考え方
- 8. EC2上にrailsアプリをデプロイするまで~puma起動で躓いた所を整理
- 9. [Rails]MVCの責務範囲を サクッと説明
- 10. Railsで非同期処理 セレクトメニューの値による項目の表示制御
- 11. Rubyのメソッドと戻り値について
- 12. deviceを使わないでログイン認証機能を作ってみる
- 13. 【Rails】ページネーション「kaminari」と「bootstrap」を使用してカスタマイズ!
- 14. DockerのRailsアプリからRedisサーバに接続したい
- 15. 【超簡単】rails投稿機能で削除しても履歴残す!!(論理削除)
- 16. React + Rails + AWS Fargate の構成を実現したい – 07 バックエンドのCI導入(GitHub Actions)
- 17. React + Rails + AWS Fargate の構成を実現したい – 05 バックエンドのテスト整備編(RSpec)
- 18. Railsでアプリ作成時のMySQLエラーの解消方法
- 19. React + Rails + AWS Fargate の構成を実現したい – 03 フロントエンドとバックエンドの連携
- 20. Docker 環境でrails db:migrateが出来ない件について
renderとredirect_toによる画面遷移について
# 概要
* create、update、destroyアクションではビューファイルを作成しないことが多い
* そのため上記のアクションで画面遷移先を決めるために、redirect_to, renderを用いる
* 新規投稿, 編集, 削除した際は、以下のいずれかの方法で指定されたビューを表示させる**redirect_to**
—![](https://i.imgur.com/p4FkFbS.png)
**処理の流れ**
1. redirect_toがルーティングにURLを送る
2. ルーティングと送られてきたURLとHTTPメソッドを照らし合わせて、どのコントローラのどのアクションを実行するかを決める
3. アクションを実行する
4. ビューを表示する**render**
—![](https://i.imgur.com/3nBtq86.png)
**処理の流れ**
1. renderで定義したビューファイルを表示するrenderが裏で動いているのはたったこれだけです
# 違いと注意点
**renderとredirect_toの大きな違いを
カラム追加、削除コマンド
# 環境
ruby 2.6.3p62
Rails 6.1.5
* * *## カラムの追加コマンド
“`
$ rails g migration Addカラム名Toテーブル名 カラム名:型名
$ rails g migration AddNameToLists name:string
“`
カラム削除コマンド
“`
$ rails g migration Removeカラム名Fromテーブル名 カラム名:型名
$ rails g migration RemoveNameFromLists name:string
“`
RDBのユニーク制約とRailsのユニークバリデーションの違いを理解しよう
Railsアプリケーションで下記のusersテーブルのemailにユニーク制約をつけたい場合、どのように実装しますか?
* users
| Field | Type | Null |
|:———–|:————|:————-|
| id | bigint(20) | NO |
| email | varchar(255)| NO |だいたいの場合、下記2つのいずれか、または両方を実装するのではないでしょうか?
* RDBのemailカラムにユニークインデックスを付ける
* Userモデルにuniqueness validationを実装するどちらの実装でもデータがユニークであることとをチェックしてくれるという意味では同じように感じますが、制約の完全性が全然違います。
一言で言うと、RDBのユニーク制約は100%保証されるが、Railsのuniquenessは突破される可能性があります。# この記事で使うユニーク制約
記事の最初に記載したusersテーブルを使
【JavaScript】プレビュー機能の実装
# 【JavaScript】プレビュー機能の実装
###### 特徴
・画像を選択するとプレビュー画像が表示される
・画像は何度も選び直すことができプレビュー画像もその度変わる## 手順
### ■HTML側の編集
#### ❶画像投稿ページのHTMLにプレビュー画像を表示するスペースを作成
“`“`
### ■JavaScript側の編集
#### ❷preview.jsを作成して読み込むよう設定
app/javascriptの中にpreview.jsを作成
“`ruby:app/javascript/packs/application.js
require(“@rails/ujs”).start()
require(“@rails/activestorage”).start()
require(“channels”)
require(‘../preview’) // 追記する
“`
#### ❸preview.jsの編集
##### ①画像投稿ページのフォームを取得
##### ②今記述したプレビュー画像を表示
Gemのバージョン指定
# Gemのバージョン指定方法
Gemfileでは、インストールするGemに対してバージョン指定方法ができます。| 指定方法 | 意味 |
|:—————–|:—————–|
|1.2.3 |1.2.3 |
|>= 1.2.3 |1.2.3以上 |
|>= 1.2.3, < 1.2.5 |1.2.3以上1.2.5未満| |~> 1.2.3 |1.2.3以上1.3.0未満|# バージョニング表記(補足)
|表記 | 意味 |
|:—————–|:—————– |
|x.0.0 |メジャーバージョン。後方互
あなたは知っている?Rubocop に教えてもらった Ruby の小ネタ5つ
## はじめに
Ruby 2.7 以降に追加された新しめの文法を5つ紹介します。
業務で Ruby のアップデート、および rubocop のアップデートをしました。
その際に学んだことですので、rubocop 関連の記事を参考にしています。## Rails/WhereExists
**`where` してから `exists?` するのではなく、`exists?` 単体でOK**
~~~ruby
# bad
User.where(name: ‘john’).exists?# good
User.exists?(name: ‘john’)
~~~https://www.rubydoc.info/gems/rubocop-rails/2.8.1/RuboCop/Cop/Rails/WhereExists
## Performance/MapCompact
**`map.compact` は`filter_map`で書き換えられる⚠︎**
`compact` は自身から `nil` を取り除いた配列を生成して返します。
`compact!` は自身から破壊的に `nil`
RubyからJavaに移行する時の考え方
# 主な違い
今までrubyを学習してきて、仕事でjavaを使うことになりました。
rubyと違うところがあったので、自分なりにまとめてみたいと思います。`Java`コンパイラによってコンパイルされる静的型付け言語
`Ruby`インタプリタによって解釈されるスクリプト言語で、動的型付け言語上記が一般的に説明されている説明となります。
自分の言葉で説明すると、
`Java`は型を宣言するのでコードが長くなるが、大規模開発などたくさんの人が関わる開発に向いている。習得の難易度は`Ruby`よりも高め。`Ruby`は、型を宣言する必要がなく短くて直感的にコードを書ける。アジャイル開発に向いている。習得の難易度が低いことや、日本語のドキュメントが充実しているので、プログラム初心者に向いている。# システムの違い
サーバーやデータベースの違いについて、表を作りました。(下記)
[]()![JavaとRailsの比較最終-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2661107/f5f88
EC2上にrailsアプリをデプロイするまで~puma起動で躓いた所を整理
アプリケーションのpumaの起動で起きたエラーとその解決策を記録。
もろもろの設定を終えた後に
bundle exec pumactl start
で起動しようとすると、
! Unable to load application: Aws::Sigv4::Errors::MissingCredentialsError: missing credentials, provide credentials with one of the following options:
– :access_key_id and :secret_access_key
– :credentials
– :credentials_provider
missing credentials, provide credentials with one of the following options:
– :access_key_id and :secret_access_key
– :credentials
– :credentials_providerという謎エラー。数日前に
[Rails]MVCの責務範囲を サクッと説明
## Model
– controllerの情報は参照しない
– よくあるのは、controllerで定義した`current_user`を参照してしまっていること。– viewに依存するロジックは記述しない
– DecoratorやHelperで記述する## Controller
– リクエストを受け取り、何らかの処理を行い、レスポンスを返すだけ
– インスタンス変数の代入はアクションメソッド(indexやnewなど)直下で行う
– before_actionやprivateメソッド内で代入すると可読性が下がってしまう## View
– 複雑なロジックが含まれると可読性が落ちるので、DecoratorやHelper、Modelでの記述を検討する### おまけ
## Decorator
– Modelに依存する表示用のロジックを追加するモジュール
– `モデル名Decorator`という命名規則に従う## Helper
– Modelに依存しない表示用のロジックを記述する
– ただし、複数のモデルに依存する表示用のロジックを記述す
Railsで非同期処理 セレクトメニューの値による項目の表示制御
# まえがき
Railsでアプリを作った際に、プルダウンの値によってフォームを追加したり非表示したりする必要が出てきた。これは非同期処理といって、ちょっと難解なものらしかった。実装するとたしかにややこしいものだったので、やりかたを書いていくことにする。# 完成イメージ
![タイトルなし.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104211/737fcf03-0c5e-898c-d816-e453417cf697.gif)
画面遷移せずにフォームが出たり消えたりする。
# 動作フロー
動作は以下のようになる。
1. 値が変更されたらjsファイルの関数が発火
2. Ajax通信が行われる(指定したコントローラーへデータ送信)
3. Ajax通信のレスポンスデータをもとにviewファイル書き換え少しずつ説明していく。
## 0. 下準備:jQueryの導入
やっていく前にjQueryをRailsに導入する。いろいろあったが、私は以下のようにした。“`js:app
Rubyのメソッドと戻り値について
# 目次
1.メソッドとは?
2.戻り値とは?# 1.メソッドとは?
メソッドとは、「複数の処理を1つにまとめたもの」であり、他の言語における「関数」に相当する。
メソッドの作り方は以下の通りである。
“`
def メソッド名
処理
end
“`
※メソッドには、引数(追加情報)を渡すことでメソッドの中でその値を使うことができる。
※メソッドを呼び出すには、「メソッド名(値)」と入力する。
具体的にメソッドを使って、自己紹介をしようとすると、、、
“`index.rb
def self_intro(name)
puts “はじめまして!”
puts “私は#{name}です。”
endself_intro(“太郎”) #メソッドの呼び出し「メソッド名(値)」
“`
すると以下のように出力される。
“`console
はじめまして!
私は太郎です。
“`
# 2.戻り値とは?
戻り値とは、「メソッドを呼び出した際に受け取る値のこと」のことである。
メソッドの中でreturnを使うことで呼び出し元で値を受け取ることができる。
returnの使い方は以
deviceを使わないでログイン認証機能を作ってみる
※この記事はRails初学者向けです
:::note info
deviceってなに?
railsのgemの一つで、ログイン認証機能が簡単に実装できる。
[https://github.com/heartcombo/devise](https://github.com/heartcombo/devise)
:::gemは便利だけど、勉強のためにログイン認証周りの仕組みに興味があったので実装してみました。view周りの実装は今回の趣旨とは異なるため触れてません。
## モデル・コントローラの準備### 1. Userモデルを作成して、schemaファイルを修正
“`rb
$ rails g model user name:string email:string encrypted_password:string
invoke active_record
create db/migrate/[timestamp]_create_users.rb
create app/models/user.rb
invoke
【Rails】ページネーション「kaminari」と「bootstrap」を使用してカスタマイズ!
# はじめに
kaminariというGemには、BootstrapなどのCSSフレームワークのテンプレートファイルが用意されています。
CSSフレームワークのクラスを手動で付与しなくても、専用コマンドを実行するだけで簡単にテンプレートファイルを実装できます。※Rails6を使用しています。
※bootstrap導入済み# 完成イメージ
![pagenation.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730527/8de427a8-6638-ca5a-d627-2ea5a4789e5f.png)## Getting Started
#### ①Kaminariをインストールする
ページネーション機能の実装には、gemの「kaminari」を使う。
“`:Gemfile
:
:gem ‘kaminari’,’~> 1.2.1′
“`
#### ②bundle installする
“`:terminal
$ bundle install
“`
#### ③kaminari
DockerのRailsアプリからRedisサーバに接続したい
## はじめに
docker環境で起動しているrailsアプリからホストで起動しているredisサーバに接続したい。
なお、前提として、dockerでのrailsアプリの環境構築が完了しているものとする。## 環境
– ローカル環境
– macOS
– docker環境
– ruby 3.1.2
– Rails 7.0.3.1## 手順
### 1. ローカルホストでredisを起動する
まずredisをインストールするために、下記のコマンドを実行
“`
brew install redis
“`
インストールされているか確認する
redisがあればOK
“`
$ brew list | grep redis
redis
“`
redisサーバをバックグラウンドで起動
“`
brew services start redis
“`
redisのクライアントコマンドで以下のように、接続確認を行い、”PONG”が返ってくることを確認
“`
$ redis-cli ping
PONG
“`
### 2. rails側にredisを導入する
Gemfileに
【超簡単】rails投稿機能で削除しても履歴残す!!(論理削除)
# やること
rails の投稿機能で削除してもレコードを完全に削除するのではなく、ユーザーから非表示になるのみで投稿者や管理者から復元できるようにする!
![画面収録-2022-08-25-18.19.24.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2586059/cd75eb93-9646-722a-5b2d-50028b94f021.gif)# 手順
1. gemのインストール
1. カラムの追加
1. 一覧ページの表示
1. 削除、復元
こんな感じでやっていきます!今回はgemの機能が強すぎるので gemの使い方がメインになります:massage:
早速やっていきましょー!!# 1.Gemのインストール
“`gemfile:Gemfile
gem ‘discard’, ‘~> 1.2’
“`
“`terminal:terminal
bundle install
“`# 2.カラムの追加
論理削除をしたいテーブルに`discarded_at`カラムを追加します!
“`te
React + Rails + AWS Fargate の構成を実現したい – 07 バックエンドのCI導入(GitHub Actions)
# 目次
– [概要](#概要)
– [本記事のゴール](#本記事のゴール)
– [成果](#成果)
– [つまづいた点](#つまづいた点)
– [1. yarnコマンドが見つからなくてエラー](#1-yarnコマンドが見つからなくてエラー)
– [エラー内容](#エラー内容)
– [解決策](#解決策)
– [2. rakeコマンドで失敗する](#2-rakeコマンドで失敗する)
– [エラー内容](#エラー内容)
– [解決策](#解決策)# 概要
https://qiita.com/memomaruRey/items/746f9cff0ceefe8b6157
# 本記事のゴール
以下を参考に、GitHub Actionsを用いたバックエンドのCI導入を行う。https://codelabo.com/posts/20201128164634
# 成果
以下のように、ブランチにプッシュ後に、以下記事で書いたテストが実行されていることを確認した。
https://qiita.com/memomaruRey/items/8a11
React + Rails + AWS Fargate の構成を実現したい – 05 バックエンドのテスト整備編(RSpec)
# 目次
– [概要](#概要)
– [本記事のゴール](#本記事のゴール)
– [成果](#成果)
– [テストに成功する場合](#テストに成功する場合)
– [テストに失敗する場合](#テストに失敗する場合)
– [つまづいた点](#つまづいた点)# 概要
https://qiita.com/memomaruRey/items/746f9cff0ceefe8b6157
# 本記事のゴール
以下を参考にバックエンドのテスト整備を行う。https://zenn.dev/hibriiiiidge/books/49ee4063b10cec1df1a2/viewer/f8fbf49145c733a81dfc
# 成果
以下コマンドにより、テストを実行できるようになった。
## テストに成功する場合
“`bash
bundle exec rspec
..Finished in 0.03596 seconds (files took 2.09 seconds to load)
2 examples, 0 failures
“`## テストに失敗する場合
`
Railsでアプリ作成時のMySQLエラーの解消方法
# 動作環境
M1 macboook pro
macOS Monterey ver.12.5# 1. opensslの再設定
`rails new (アプリ名) -d mysql`を実行すると、以下のエラーが発生。
“`
An error occurred while installing mysql2 (0.5.4), and Bundler cannot continue.
“`macOSのSierra以降は、opensslがデフォルトが変わっているようで、以下のように再度インストール。
“`
% brew install openssl
% bundle config –local build.mysql2 “–with-ldflags=-L/usr/local/opt/openssl/lib”
“`そして、改めて`bundle install`を実行。
“`
% bundle install
“`# 2. railsサーバが起動しない
opensslの設定後、今度は、`rails s`でサーバが起動せず、以下のエラーが発生。
“`
=> R
React + Rails + AWS Fargate の構成を実現したい – 03 フロントエンドとバックエンドの連携
# 目次
– [概要](#概要)
– [本記事のゴール](#本記事のゴール)
– [成果](#成果)
– [バックエンドの動作確認](#バックエンドの動作確認)
– [フロントエンドとバックエンドのつなぎこみ](#フロントエンドとバックエンドのつなぎこみ)
– [作業メモ](#作業メモ)
– [フロントエンド](#フロントエンド)
– [1. バックエンドのAPIからのレスポンスの扱い](#1-バックエンドのapiからのレスポンスの扱い)
– [2. Warning: Each child in a list should have a unique “key” prop.への対処方法](#2-warning-each-child-in-a-list-should-have-a-unique-key-propへの対処方法)
– [バックエンド](#バックエンド)
– [1. Railsのmigrationファイル場所](#1-railsのmigrationファイル場所)
– [2. バリデーションの設定ファイル場所](#2-バリデーショ
Docker 環境でrails db:migrateが出来ない件について
こんにちは。たにやんです。記事を見ていただきありがとうございます。
初歩的なエラーですがつい先日にも同じエラーでつまづき何回も同じエラーでつまづいては効率が悪いと思い、
記事を書くことにしました。# やりたいこと
プロフィール編集のページを作ろうと思い、usersテーブルに新しくカラムを追加したい。
そこで以下を実行“`rails db:migrate“`
# 結果
“`
rails aborted!ActiveRecord::DatabaseConnectionError: There is an issue connecting with your hostname: db.Please check your database configuration and ensure there is a valid connection to your database.
Caused by:
Mysql2::Error::ConnectionError: Unknown MySQL server host ‘db’ (8)
“`毎度おなじみの