Rails関連のことを調べてみた2020年12月25日

Rails関連のことを調べてみた2020年12月25日

【Rails6】Dockerによる開発環境構築

#はじめに

先日開発環境にDockerを導入しましたが、記事に書いてあるコードをほとんど模写したような状態であったため、本日改めてコードの意味を確認するため、記述していきます。

なお、環境構築を行うにあたり、参考にさせて頂いた記事は以下です。

[docker ruby(2.6.5)・mysql(5.6.47)・rails(6.0.0)の開発環境構築](https://qiita.com/Tomohisa_koyama/items/5f2d32fd0677aa244b72)
[既存のRailsアプリの開発環境にDockerを導入する手順【Rails, MySQL, Docker】](https://qiita.com/DaichiAndoh/items/66bf631f72698b5c2a53)
[Docker + rails6 + MySQL + bootstrap,jqueryまで環境構築完全ロードマップ](https://qiita.com/rakko1124/items/ff698a966b94ebe8aa7e)
[Docker公式:Railsクイックスタート](https

元記事を表示

Deviseのモヤモヤを解消して快適なRailsライフを送ろう!

この記事は[Zenn](https://zenn.dev/)に投稿した記事の転載です。
https://zenn.dev/kitabatake/articles/start-to-like-the-devise

この記事は、Railsのユーザー認証機能のgemとして有名なDeviseを使っていて感じがちな、モヤモヤを解消することを目的としています。
私自身がモヤモヤを感じていたため、このようなタイトルにしましたが、単に「Deviseに対する理解を深める」目的で読んでいただければと思います。

[Devise](https://github.com/heartcombo/devise) はとても便利ですよね。
installして、configファイルを設置して、モデルの設定をして、routes.rbに`devise_for`を書くだけで導入できます。
たったこれだけで、、

– ユーザーの新規登録画面の作成
– ログイン画面の作成
– パスワードを忘れた際の画面の作成
– `authenticate_user!`や`user_signin?`のようなユーザー認証向けの各種メソッドの付与

元記事を表示

Jbuilderのレンダリング時間をjsonapi-serializerで改善するTips

RailsのViewでJbuilderを使用していて、collectionのレンダリングが遅いなと感じたことはないでしょうか?
その場合、jsonapi-serializer で手軽に改善できるかもしれません。
jsonapi-serializer の詳しい使い方は [公式ドキュメント](https://github.com/jsonapi-serializer/jsonapi-serializer) を見ていただくとして、本記事では Jbuilder を jsonapi-serializer で置換する際のTipsを書きます。
なお完全に置換するのではなく手軽に検証するために Jbuilder と jsonapi-serializer を共存させるハイブリッド形式にしています。(効果が確認でき必要であれば全置換すればいいと思います)

# おことわり

とある事情により本記事を書いており、主に時間の制約により以下の注意点があります。

* 実際のプロジェクトで以前に対応した内容を基に本記事を書いています。結構速くなった記憶はあるのですが、何倍速くなったとか、実際のベンチマークを提示す

元記事を表示

Dockerをついに使ってみる:開発環境の起動、停止、削除編

前回で開発環境は整えることができた
[Dockerをついに使ってみる:用語、イメージ、立ち上げ編](https://qiita.com/pank24ever/items/9d3bf84462e5d28bbb5c)

この記事では、開発環境の起動、停止、削除の
方法をまとめる

##起動する
**docker-compose.yml**があるディレクトリ上で実行する

“`
docker-compose up -d
“`

「-d」をつけずに起動させると
サイトのアクセスログ等が見ることができる

##停止する
下記のコマンドでコンテナを停止する

“`
docker-compose stop
“`

**停止状態**になっただけで、**コンテナ自体は存在する**
必要に応じて、このコマンドを実行して開発を進めていく

##削除する

コマンドの停止ではなく、コマンドごと削除したい場合は
下記のコマンドを実行する

“`
docker-compose down
“`

削除しても、`docker-compose up`コマンドで
再度コンテナが作成、起動する

また`Ctr

元記事を表示

rails+devise+devise_token_auth

“`ruby:model/cuustomer.rb
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable, :confirmable,
:omniauthable
include DeviseTokenAuth::Concerns::User

serialize :tokens

after_create :send_confirmation_email, if: -> { !Rails.env.test? && Customer.devise_modules.include?(:confirmable) }
private
def send_confirmation_email
self.send_confirmation_instructions
end

end
“`

##このserialize :tokensのおかげでPostmanでログインしようとして

元記事を表示

Ruby on Rails概要(初心者まとめ)

#はじめに
プログラミングを初めて2ヶ月の駆け出しエンジニアが文字通り初心者目線で、かつ初心者でもできるだけ分かりやすいようにRuby on Railsについてまとめてみました。
間違いなどありましたらご指摘いただけると幸いです。
#Ruby on Railsとは
Rubyを元に作られたアプリケーションフレームワークです。
そもそもフレームワークとは簡単に言い換えると「枠組み」や「骨組み」「雛形」のことで、アプリを作る際に必要となる基本的なものがあらかじめ準備してくれているものになります。
ゼロから開発する必要がないため、開発にかかるコストを減らしてくれるとても便利なものです。
##Rails Way
Railsはフレームワークというある種固定的なレールに柔軟で自由なRubyを使い、「フレームワークの良いところ」と「自由に自分のコードを書けること」を両立させたものと言えるでしょう。
これを踏まえてRailsらしく考えRailsらしいコードを書くことが大事になってきます。
そうすることで綺麗な読みやすいコードになっていき自ずと生産性も上がっていくはずです。

##Railsの哲学
上記で

元記事を表示

[5分]超簡単なRailsAPIを作ってみる

##はじめに
railsAPIを作ってみたので備忘録として残す。
次回はswaggerなどのAPIドキュメントの導入をやってみる

##Rials APIの作り方
rails newに–apiを付ける

“`
rails new rails-test-api –api
“`

##簡単な使い方
CRUDを生成する
今回は掲示板CRUDを作成

“`
rails generate scaffold Board title:string text:string
rails db:create
rails db:migrate
“`

アプリケーションを起動

“`
rails s
“`

http://localhost:3000/boards に接続

[]が表示されるCurlでPOSTを叩く

“`
curl -X POST -H “Content-Type: application/json” -d ‘{“title”: “test”, “text”: “テストです”}’ http://localhost:3000/boards
“`
※Curlの叩き方は[こち

元記事を表示

db:migrateの際に「private method `String’ called ~ 」エラー

##はじめに
マイグレート時に下記のエラーがでたので備忘録として書く

“`
== 20~~~~~~~~~~~ CreateBoards: migrating =====================================
— create_table(:boards)
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:

private method `String’ called for 〜〜〜〜〜〜〜〜〜
“`

マイグレーションファイル

“`
class CreateBoards < ActiveRecord::Migration[6.0] def change create_table :boards do |t| t.String :title t.String :text t.timestamps end end end ``` ##対処方法 string

元記事を表示

bundle install でCould not locate Gemfile

##はじめに
bundle installでCould not locate Gemfileエラーが出たので対処

##解決方法
現在いるディレクトリにGemfileがないとの事
単純なミスだった。。。
Docker構築すれば陥らないミスなのでDocker環境を作りましょう笑

##参考

元記事を表示

Railsのscopeのアンチパターンとその解消法

本記事は [Classi Advent Calendar 2020](https://qiita.com/advent-calendar/2020/classi) 23日目の記事です。

こんにちは。@seigaです。今回はRailsのscopeのアンチパターンとその解消法について解説します。

**scope(named_scope)**はRails2.1の目玉機能として野良gemからRails本体に取り込まれた経緯を持つ機能です。[RubyKaigi2008で松田さんが話された](https://www.slideshare.net/a_matsuda/new-wave-of-database-programming-with-ruby-19-on-rails-21/)のが周知の初めでしょうか。これまでクエリの組み立てを直接行っていたのが、そのクエリ断片を名前のついたscopeとして定義、動的に組み合わせることで一つの集合とすることが出来るようになりました。

“`some_model.rb
scope :published, -> { where(published: tr

元記事を表示

gem sorceryを使ってログイン機能を実装した話

## 何をしたか
`sorcery`というgemを使って、ログイン機能を実装しました。初めて使うgemで、日本語で見られるドキュメントも少なかったので、自分のためにも手順書とマニュアルを作っておこうと思います。

なお、実行環境は下記の通りです。

– `Rails 5.2.3`
– `Ruby 2.6.4`

## どんなgem?

認証のための最小限のロジックを積んだgemで、ユーザーの必要に応じてメソッドを増やしたり拡張をしていくことを目的としています。

▼公式ドキュメントはこちら
[Sorcery/sorcery](https://github.com/Sorcery/sorcery)

## 導入方法

この記事に記す手順は、概ね[公式のチュートリアル](https://github.com/Sorcery/sorcery/wiki/Simple-Password-Authentication)に沿っています。Gemの導入から、ログイン・ログアウト機能の実装までを記載しています。

以下、手順です。
まずは以下をGemfileに記載し…

“`Ruby:Gemfile

元記事を表示

表がクロスした箇所の登録・更新機能の作成方法

#作成の背景
現在、野球のスコアブックを記録するアプリの作成を実施しています。
野球の1回、1打席目の人の成績を登録したいという場合に、
スコアブックにて1回と1打席がクロスした箇所をクリックすれば登録フォームが表示できる機能があればと考えミニアプリを作成して挙動の確認を実施することにしました。

#ミニアプリの仕様
生徒がどの科目で何点とったかが分かるマトリックス表を作成しました。
表のクロスした箇所をクリックすると点数を記入できるようにしていきます。
また、既存に入力した項目に関しては入力値の更新ができるようにします。

###DB設計
[![Image from Gyazo](https://i.gyazo.com/2b34ed22d24988def54a2b340a9386c6.png)](https://gyazo.com/2b34ed22d24988def54a2b340a9386c6)

###完成イメージ図
[![Image from Gyazo](https://i.gyazo.com/1dfd3ddda0970e324dd1fc44ca4db2f6.gif)](ht

元記事を表示

【Ruby On Rails】特定のidに紐づいた複数レコードのカラム情報をまとめて取り出し表示させる方法

# 前提

このようなテーブルがあったとします。

hoges テーブル

|id |text |content_id |
|—|—|—|
|1 |morning |1 |
|2 |afternoon |2 |
|3 |evening |2 |
|4 |night |3 |
|5 |midnight |3 |
|6 |late night |3 |

# 考え方
特定のidに紐づいた複数レコードのカラム情報をまとめて取り出すには、ビューの中で”インスタンス変数.each”という形でeachメソッドを使用すれば、データ情報を複数表示することが可能。

# 書き方

1. eachメソッドを使用するには、配列を渡さなければいけない。whereメソッドを用いることで、条件に合致するオブジェクトを配列として取り出す。今回の場合は、Hoge(hogesテーブル)を指定し、whereメソッドを用いて、paramsで運んできたidがcontent_idと一致しているものを@hogesに代入。

“`ruby:hoges_controller.r

元記事を表示

rails db:migrateでエラー

rails db:migrateを行った後のエラー

“`
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:
.
.
.
“`

原因

`rais db:migrate`の前に行ったコマンドで何か手違いが起きている?たぶん。。。

解決策

“`
$ rails db:migrate:reset
“`

“`
$ rails db:migrate
“`

これで解決!!!

元記事を表示

gem update時の確認でやっていること 見ているところ

この記事は [Ubiregi Advent Calendar 2020](https://qiita.com/advent-calendar/2020/ubiregi) 24日目のエントリです。

gem の更新は放っておくといつの間にか差分が大量になっていて確認作業が大変になったり、
無用心に breaking change のある更新を行なってしまうとアプリケーションが壊れてしまったりしまいますね。
そうならないように日頃 gem updateをしていることだと思います。

gem updateの仕方自体は手動で `bundle update` したり [Dependabot](https://dependabot.com/) を導入したりがあると思いますが、今回はそれらによって生まれた更新内容を見ていく手順を書いていこうと思います。

まずはCHENGELOGをみます。

# CHENGELOGから読み取る内容

## CHANGELOGを見て影響が小さいとわかる場合

例ですが、変更が小さくこまめに更新があるgemといえば `aws-sdk-~~~` が代表的かなと思ってい

元記事を表示

ActiveRecordでnew => build => save! するとどうなる

関連付けのあるモデルにおいて、親レコードをnew => 子レコードをbuild => 親レコードをsave! したときの挙動が複雑な気がしたのでメモ。

(理解力が不足しているだけかもしれない。)

検証環境: ActiveRecord 6.0.2.1

# 結論を言葉で

– has_oneでは親レコードと子レコードのvalidityは独立している。
– has_manyでは子レコードが1つでもinvalidなら親レコードもinvalidになる。

親レコードをsave!したとき、

– 親レコードがinvalidならraiseする
– 親レコードも子レコードもvalidな場合、insertがtransactionで囲まれて実行される
– 親レコードがvalidで子レコードがinvalidな場合(上記の性質によりhas_oneでのみありうる)、親レコードのinsert処理のみが実行される

### 追記

has_oneにもhas_manyにもvalidateというオプションが存在し、デフォルトがhas_oneだとfalse, has_manyだとtrueになっているため本記事の挙動

元記事を表示

古いRuby環境と古いRailsを動かすのにすこしハマった

### 古い実行環境を構築する必要が発生した

Xcodeのアップデートや `brew upgrade` 等を行っていたら、
動いていた Rails アプリが動かなくなったので `rbenv` で Rubyからインストールし直した時にハマったメモです。
全然動かなくなったので `Gemfile.lock` も削除(リネーム)してから行いました。

#### 環境

| プログラム | 動いていたバージョン | 動かなくなったバージョン | 現在のバージョン |
|:-:|:-:|:-:|:-:|
| bundler | 1.13.2 | 2.2.3 | 1.13.2|
| Ruby | 2.3.0 | 2.3.0 |2.3.0 |
| Rails | ~> 4.2 | ~> 4.2 | ~> 4.2|
| PostgreSQL | 11 | 13 | 13|
| Xcode | 11.x | 12.3 | 12.3|

#### 最初の `bundler` インストール手順(動かなくなったバージョン)

“`shell
% rbenv uninst

元記事を表示

Rails(APIモード)× React × TypeScriptで作るシンプルなTodoアプリ

## 対象読者

– バックエンドとフロントエンドを切り離してアプリを作成したい人(今回はRailsとReact)

長い事フロントエンドから逃げ続けてきた自分ですが、さすがにそろそろ何かしら身に付けないとマズいと思いReactに入門した際のメモ書きです。

どちらかと言うと「バックエンドとフロントエンドを切り離した環境構築」に重きを置いた書き方になるため、コード自体の解説はほとんど無いに等しいかもしれません。

Railsはもちろん、ReactやTypeScriptに関してもある程度は事前に学習した上で読んだ方が良いと思います。

Dockerfileを書き始めるところから始めるので、ちゃんと手順に沿っていれば同じものは作れます。とりあえず手を動かして雰囲気を掴みたい人向けです。

## 本記事で目指す構成

**使用技術**

– Rails
– React
– TypeScript

“`
rails-react-ts-sample
├─ backend
├─ app
├─ bin
├─ config
├─ db
├─ lib
├─ log
├─ p

元記事を表示

【初学者必見】 投稿時刻の表示を日本時刻に変更してみた 【l(エル)メソッド】

Railsで作ったアプリのデータベースから情報を引っ張り出してcreated_atやupdated_atを出力すると日本時刻ではありません。
そのため、
1. 設定ファイルで時刻を日本時刻に変更する
2. l(エル)メソッドを用いて時刻を表示する
を実行し、直していきます。

# 1. 設定ファイルで時刻を日本時刻に変更する
その前に↓
> ## 設定ファイルってなに??
>railsでは、configディレクトリにて実行環境に関する物を管理しています。
>configディレクトリのapplication.rbファイルでは、そのRailsアプリケーションの開発環境すべてにおいて共通となる設定が記述されています。

まず、config/application.rbファイルを開き、以下の設定を追加します。

“`ruby:config/application.rb
module ”アプリ名”
class Application < Rails::Application # Initialize configuration defaults for originally gen

元記事を表示

Rails6系に関するMEMO

# Rails6系のディレクトリ構造

何となくでもそれっぽいアプリが作れてしまう `Rails`。
本当にありがたいんだけど、ディレクトリ構造がよくわからないまま実装を進めていくとメンテナンス製がとっても悪くなりそう。。。
なので改めてディレクトリの概要をメモしておきたいと思います。

![railsディレクトリの概要.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/908918/8dbb84a5-48a9-426e-0013-dde2353f7b3a.png)

各ディレクトリの中身に関してはゆくゆく追記していきます。

# 参考記事

– [Railsガイド](https://railsguides.jp/getting_started.html)
– [Railsドキュメント](https://railsdoc.com/rails_base)
– [デフォルトのRailsフォルダ構造](https://qiita.com/RMEL/items/d2fc650396be67e52ef1)

元記事を表示

OTHERカテゴリの最新記事