Rails関連のことを調べてみた2022年06月04日

Rails関連のことを調べてみた2022年06月04日

学習時におけるRailsのメリットとデメリット

# 取り扱うこと
今回はRailsのメリット・デメリットについて

僕個人としてはすごく大好きな言語
JavaScriptと同じくらい好きです

さてそんなRailsのメリットとデメリットについてご紹介

# 学習時のメリット、デメリット

## メリット

1.規則に従えばそれで動く
2.CRUDアプリを作るなら経験上一番カンタン
3.gemの存在

さて解説

### 規則に従えばそれで動く
上2つは概念的なことでした
次は実用的なこと
少し例えて見ます
逆にわかりにくかったらごめんなさい
あなたは本棚を作ろうとしています
いきなり木材と工具を渡されてもちょっと訳わかんないですよね?
でもRailsは通販で本棚購入して設計図をもとにパーツを組み立てるだけです
多言語だと設計図をまず自分で構想する必要があります
書いてて思ったのですがプラモデルだと思ってください

### CRUDアプリを作るなら経験上一番簡単
CRUDアプリってなんやねん
と思う方もおられると思います
Create,Read,Update,Deleteの頭文字を取ったもので、この機能が使えるアプリを指します
簡単に

元記事を表示

🔰【初学者用】RSpecでテストコードを書こう!③【コントローラーの単体テスト簡単な実装例】

# はじめに
①🔰【初学者用】RSpecでテストコードを書こう!【概念・準備】

https://qiita.com/hondano_gentuki/items/2003971a4f5a97481930

②🔰【初学者用】RSpecでテストコードを書こう!②【簡単な実装例】

https://qiita.com/hondano_gentuki/items/0a91a595df9c0d76f1cc

今日の投稿は③になります!
前回はモデルの単体テストを行ったので今回はコントローラーの単体テストです。

# コントローラーの単体テストはどんなテスト?
モデルのテストでは、インスタンスを生成し、それがモデルに規定した通りの挙動になるか(バリデーションが正しく働くかなど)を確かめます。
コントローラーのテストでは、あるアクションにリクエストを送ったとき、想定通りのレスポンスが生成されるかどうかを確かめます。

## Request Spec
RSpecの導入が完了していれば使用できる、コントローラーのテストコードを書くために特化した手法のこと。

# テストコードの具体的実装
まずはファイル

元記事を表示

RSpecでsessionメソッドを使えるようにするには?

## 背景
フレンドリーフォワーディングのテストをRSpecで行いたい。
編集ページのpathをsessionがちゃんと保持しているのかを確認するために、編集ページのpathと` session[:forwarding_url] `が一致していることをテストしたいが、sessionメソッドを使おうとしたらエラーが発生し解決に時間がかかったので、備忘録として投稿します。

## 失敗したコード
“` spec/system/users_edit_spec.rb
RSpec.describe “Users”, type: :system do
describe ‘PATCH /users’ do
let(:user) { FactoryBot.create(:user) }
.
. #中略
.
it ‘ログインすると、編集画面にリダイレクトされる’ do
visit edit_user_path(user)
#↓ここでフレンドリーフォワーディングのテストをしている
expect(session[:forwarding_url]).to

元記事を表示

【Rails+DynamoDB】Dynamoidの主な使用方法まとめ

# はじめに

[Dynamoid](https://github.com/Dynamoid/dynamoid)は[Amazon DynamoDB](https://aws.amazon.com/jp/dynamodb/)をRailsアプリケーションで利用するためのORMです。
Dynamoidを用いることで、ActiveRecordに近い感覚でDynamoDBにアクセスできるようになります。
この記事ではRailsアプリケーションにDynamoidを導入する手順と主な使用方法をまとめました。

# 導入
Gemfileに以下を追記します。

“`ruby:Gemfile
gem ‘dynamoid’
“`

バージョンについて

AWS SDKとのバージョン互換性は次のようになっています。
| Dynamoid version | AWS SDK version|
|:-:|:-:|
| 0.x | 1.x |
| 1.x | 2.x |
| 2.x | 2.x |
| 3.x | 3.x |

元記事を表示

PostgreSQLで正規表現の逆引き検索

# TL;DR
### 正引き検索
eg: 4桁数字から始まる電話番号を検索する

“`sql
SELECT * FROM users WHERE (tel ~ ‘^\d{4}-‘);
“`

### 逆引き検索
eg: 会員の電話番号から合致するパターンを検索する

“`sql
SELECT * FROM filters WHERE (‘0120-123-456’ ~ regexp);
“`

Railsでの使い方
“`rb
Filter.where(“? ~ regexp”, user.tel)
“`

# はじめに
最近、とある理由で会員の情報から、合致する全てのパターンを検索するというニッチな要望を対応していました。
例えば、会員にメルマガを送信する時、固定電話で登録していた方と、携帯で登録していた方と、法人様で登録していた方にはそれぞれ違う内容で送信したいとかの要望について、今まではハードコーディングでロジックに組み込んでいましたが、管理画面でフィルターを作れません。

そのために、パターンそのものをDBに登録して、一括配信する際に、どのフィルターに当てはまるかを

元記事を表示

【RubyMine】よく使う便利なショートカット10選

# はじめに
私は普段、[RubyMine](https://www.jetbrains.com/ja-jp/ruby/) というIDE(Integrated Development Environment)を用いてMacでRuby/Railsプロジェクトの開発をしています。
そんなRubyMineには便利なショートカットが数多くあります。
中でも、私が普段からよく使うショートカットを一部抜粋して紹介しようと思います。
すべてのショートカットを知りたい方は ▷[こちら](https://resources.jetbrains.com/storage/products/rubymine/docs/RubyMine_ReferenceCard_mac.pdf)。
# よく使う便利なショートカット10選

| 記号 | 意味 |
|:-:|:-:|
| ⌃ |Controlキー|
| ⌥ | Optionキー |
| ⇧ | Shiftキー |
| ⌘ | Commandキー |
## 1. ⌘Click / ⌘B : 宣言場所 ・ 定義元参照
Commandキーを押しながら変数

元記事を表示

Ruby on railsでActive Strageを導入する

## はじめに
今回は、ファイルアップロード機能を簡単に実装できるGemであるActive Strageの導入について記事を残しておこうと思う。ActiveStrageを使用すると、画像などのアップロードを簡単にするメソッドを使用できるようになったり、保存するテーブルを簡単に作成することができる。

## ImageMagickの導入
コマンドラインから画像に処理を加えることができるソフトウェア。これをRailsで扱うには`MiniMagick`というGemが必要。
“`terminal:ターミナル
% brew install imagemagick
“`
## Gemfileの編集
`MiniMagick`と画像サイズを調整する機能を持つ`ImageProcessing`のインストールを行う。
“`ruby:Gemfile
gem ‘mini_magick’
gem ‘image_processing’, ‘~> 1.2’
“`
“`terminal:ターミナル
% bundle install
“`
## ActiveStrageをインストールする
“`termin

元記事を表示

【Rails】【Ruby】form_with で入力された値(params)を取得したい!

## はじめに
未経験からエンジニアに転職しました。
まだまだわからないことだらけですが、毎日楽しく働いています!

業務や個人開発での発見やエラー解決などをアウトプットしています。
初学者向けの内容です。

## やること
Railsの form_with で入力された値を取得して色々操作したい。
今回はサンプルとして
「form_with で入力されたID(数値)を取得して、そのID(数値)を使ってデータを操作する」をやってみる。

# 手順
~~~ruby:view
<%= form_with url: huga_huga_path, method: :patch, local: true do |f| %>

# :hoge_id がparams になる
<%= f.text_area :hoge_id, class: 'textarea' %>
<%= f.submit %>

<% end %>
~~~

![スクリーンショット 2022-06-03 8.31.51.png](h

元記事を表示

データベースの中身をrails dbconsoleで確認する方法

# 記事の内容
ターミナルでデータベースの中身を確認する。

## dbのコンソールを起動する

まずはコンソールを起動する。
“`
$ rails dbconsole
“`

コンソールが起動。
“`
sqlite>
“`

## コンソールからデータベースの内容を確認

テーブル一覧を表示。
“`
sqlite> .table
ar_internal_metadata schema_migrations users
“`

指定したテーブルの構造を確認。
“`
.schema users
CREATE TABLE IF NOT EXISTS “users” (“id” integer PRIMARY KEY AUTOINCREMENT NOT NULL, “email” varchar NOT NULL, “crypted_password” varchar, “salt” varchar, “last_name” varchar NOT NULL, “first_name” varchar NOT NULL, “created_at” dat

元記事を表示

【初期化】データベースの内容をまっさらな状態にしたい

簡単な内容ですが、記事にします。

## 【やりたいこと】DBの内容をリセットしたい
“`
$rails db:reset:migrate
“`
マイグレーションファイルが古い順から全て実行されるので、DBの中身が削除され、DBが復元された状態になる。
DBのカラムが大量にある場合などDBの把握が怪しい場合など上記のコマンドを使用する。

“`
$ rails db:reset
“`
Schema.rbのデータを元にDBを作り直すので、schema.rbの状態で復元されて問題なければ上記のコマンドを使用する。

参考
https://easyramble.com/difference-bettween-rake-db-migrate-reset.html
https://railsguides.jp/active_record_migrations.html

元記事を表示

Ruby on railsのサーバー強制終了

## 環境
Ruby 2.6.5
Rails 6.0.0
## 状況
Railsで開発中に何度もやってしまったミス。ローカルホストのサーバーを立てている時に間違えてターミナルのタブを消してしまって、ctrl+cでの終了ができなくなり、再度`rails s`をしてもサーバーの立ち上げができない・・・と言う状況。これは強制終了することで解消するので、対処法についてまとめる。
## エラー表示
“`terminal:ターミナル
A server is already running. Check /home/user/original_application/lbr/tmp/pids/server.pid.
“`
## `プロジェクト名/tmp/pids/server.pid`のファイルを確認する
“`terminal:プロジェクト名/tmp/pids/server.pid
1 1650
2
“`
このPIDの値をkillすればよい
“`terminal:ターミナル
% kill 1650 #ファイル内に表示されていたPID
“`
以上で強制終了が完了する。
## ポート番号がわ

元記事を表示

carrierwaveで動的に画像サイズを変更する

## 結論

– 結論としては自作でメソッドを追加し、そこから標準の加工メソッドにサイズを指定して渡すようにする(今回はmodel classに値を渡してそこから取得するようにしました)

“`app/models/user.rb
class User < ApplicationRecord mount_uploader :image, ImagesUploader attr_accessor :width, :height end ``` ```app/uploaders/images_uploader.rb class ImagesUploader < CarrierWave::Uploader::Base include CarrierWave::MiniMagick ## 独自メソッドでサイズを指定できるメソッドを作成してそれをprocessで呼び出す def dynamic_resize_to_fil resize_to_fill model.width, model.height end process :dynamic_re

元記事を表示

【Rails】csvファイルをインポート→整形してDBに保存する

# やりたいこと
csvファイルをアップロードして、必要なデータを抽出し、DBに保存
データが重複している際は既存データにアップロードしたデータを上書きする

# 前提条件
rails7系
DB作成済み

# 実装手順

### ① gemを追加

“`Gemfile
gem ‘roo’
“`

Gemfileにcsvを読み込むためのgemを追加し、bundle installする。

### ② ルーティングの設定

“`config/routes.rb
get ‘data_upload’ => ‘data_upload#index’
post ‘data_upload’ => ‘data_upload#create’
“`

### ③ 標準ライブラリを追加
“`config/application.rb
require ‘csv’
“`

### ④ viewにアップロード用のformを作成
Rails5.1より導入されたform_withを使ってアップロード用のフォームを作成します。
指定したpathに対してpostリク

元記事を表示

sitemap generator + jsonでサイトマップ生成

SEO対策でサイトマップをGoogleに登録するため、サイトマップを生成することにしました。
ただ、Next.jsのSSRでサイトを実装していて
インデックスさせたいページの件数が膨大(50万件くらい)だったので、手動で作るのは無理です。

Railsで「sitemap generator」という便利そうなgemがあったので、
こちらを使ってサイトマップを生成してみます。
インデックスさせたいURLは、jsonで下記のような形式で用意しました。

“`json
{
{“id”: “123456”}
{“id”: “234567”}
}
“`

まずgemをインストール。

“`
gem install sitemap_generator
“`

`sitemap.rb`というファイルを作成し、下記の内容を記述します。

“`ruby:sitemap.rb
require ‘rubygems’
require ‘sitemap_generator’

## 空配列を用意
idList = []

## jsonデータからidの値を読み込む処理を書く(本記事では割愛)
#

元記事を表示

NoMethodError in ~#index (エラーの確認・対処)

# はじめに
Rails 6.0.3を使用してローカル環境にてアプリケーションを作成中にエラーに遭遇しました。本当に初歩的なミスですが、今後よく遭遇するであろうエラーとのことでしたので備忘録として記事にします。

# 環境
Ruby: 3.0.1
Rails: 6.0.3

# 設定内容
“`ruby
#controllerファイルの場所
frasse_app/app/controllers/frasses_controller.rb

#frasses_controller.rbのコード(抜粋)
def index
@frasses = Frasse.all
end

def new
@frasse = Frasse.new
end
“`
“`ruby
#viewsファイルの場所
frappe_app/app/views/frasses/index.html.erb
#index.html.erbのコード(抜粋)
<% @frasse.each do |frasse| %>

<%= frasse.con

元記事を表示

rbenv インストール

# Homebrew

“`
xcode-select –install
“`

## インストール
https://brew.sh/index_ja

“`
brew doctor
“`

“`
brew install wget
“`

# rbenv

“`
echo ‘export PATH=”$HOME/.rbenv/bin:$PATH”‘ >> ~/.bash_profile
echo ‘if which rbenv > /dev/null; then eval “$(rbenv init -)”; fi’ >> ~/.bash_profile
source ~/.bash_profile
“`

“`
rbenv install –list    # => インストール可能なバージョン一覧の表示
rbenv install 2.6.1 # => rubyのインストール
rbenv rehash # => rbenv の再読み込み
rbenv global 2.6.1 # => defaultで使うrubyのバージョン

元記事を表示

投稿機能をつける

ユーザーの方が行き詰まったので投稿機能を作成することにした。
そのためにMySQLでテーブルを作成する。
その後にモデルのファイルを作成、そこでバリデーションをかける。
その後実装する機能としては
・投稿機能
・投稿詳細ページ
・投稿一覧機能
・投稿編集
・投稿削除

# postsテーブルを作成
投稿の文章のデータ型を何にしようか?
調べてみると
“`CHAR“`,“`VARCHAR“`,“`TEXT“`とある。
どれを使えばいいのだろう?
### CHAR(固定長文字列)
何があっても宣言された文字分の領域を使う。
列に入れる文字列の長さが細田長に満たないばああい、文字列が最大長になるまで空きを半角スペースで埋めます。

出典 SQLゼロから始めるデータベース操作第二版 p35

### VARCHAR(可変長文字型)
カラムに宣言されたサイズを上限として値の文字数ぶんだけの領域を使用する。
最大長に満たさなくても、半角スペースで埋めなくてもいい。
出典 SQLゼロから始めるデータベース操作第二版 p35

大体長くなければvarchar(255)で足りる。
### T

元記事を表示

🔰【初学者用】RSpecでテストコードを書こう!②【簡単な実装例】

# はじめに
RSpecでテストコードを書こう!2記事目です!
①の投稿はこちら↓

https://qiita.com/hondano_gentuki/items/2003971a4f5a97481930

# テストコード書き方
Userモデルにはnameカラムとemailカラムがあるとします。
“`rails:spec/models/user_spec.rb
require ‘rails_helper’

RSpec.describe User, type: :model do
describe ‘ユーザー新規登録’ do
context ‘登録ができるとき’ do
   it ‘全ての項目が正しく入力されている時’ do
 #その処理を記述
   end
  end
context ‘登録ができないとき’ do
   it ‘nameが空では登録できない’ do
# nameが空では登録できないテストコードを記述
 end
 it ‘emailが空では登録できない’ do
# emailが空では登録できないテス

元記事を表示

save!とは?

# save!とは
・モデル保存させるもの
・既存のデータベースは更新される
# 特徴
## save!は常にバリデーションが走っている。
・常にバリデーションを走らせている。
・保存に失敗したら”ActiveRecord::REcordINvalid”が発生する。そしてレコードが保存されない。
### しかし例外も
・validate: falseを指定するとsave!のバリデーションをスキップすることが可能
## 現在時間も保存する
・デフォルトによると”save!”は現在時刻を”updated_at/updated_on”属性もを設定する。

### 例外も
・”touch: false”を指定すればこれらのタイムスタンプは更新されない。
### :touch
:touchオプションをtrueに設定すると、そのオブジェクトがsaveまたはdestroyされたときに、関連付けられたオブジェクトのupdated_atタイムスタンプやupdated_onタイムスタンプが常に現在の時刻に設定されます

出典 https://railsguides.jp/association_basic

元記事を表示

rails でTypeError can’t convert ActiveSupport::TimeWithZone into an exact numberで途方に暮れたら

rails6.1に上げる設定をしていた時に出たエラーですが、appとかconfigの下のファイルがダンプに出て来ません。
てっきり6.1の
ActiveSupport.utc_to_local_returns_utc_offset_times
関係かと思いきや、同時に調整しようとしたcookieの設定で
Rails.application.config.session_store
(略)
expires: 20.years.from_now
とすべきところを
expire_after: 20.years.from_now
としていたのが原因でした。
この設定ファイルでエラー、とは出ないので、戻すまで気がつきませんでした。
こんなやらかしは多分自分だけとは思いますが、検索しても全然ヒントがなく、しばらく途方に暮れたので恥を晒しておきます。

元記事を表示

OTHERカテゴリの最新記事