Rails関連のことを調べてみた2023年02月08日

Rails関連のことを調べてみた2023年02月08日

【Rails】モデルのカラムで選択肢を指定したいときはenumerize gemを使おう

# どうした?
ToDoアプリを作成しています。
各Todoに対して
* waiting(未着手)
* working(仕掛中)
* done(完了)

の選択肢を持った`status`カラムを付与する時に便利になりそうなenumerize gemを導入し、設定する方法をアウトプットします。

# 手順

## gemのインストール

Gemfileにenumerizeを記載します。
“`ruby
gem ‘enumerize’
“`
記載したら`bundle install`しましょう。

## モデルに選択肢を設定

**マイグレーションファイル**
マイグレーションファイルにて、Todoモデルに`status`カラムを付与する指示を与えます。
このとき、新規レコード作成時にバリデーションに引っかかるのを防ぐためにデフォルト値を指定すると良いでしょう。
“`ruby
t.string :status, null: false, default: :waiting
“`

**モデル**
モデルファイルで`status`の選択肢を配列形式で与えます。
Enumerizeモジュ

元記事を表示

docker-composeを使ってdocker化する方法(rails6×My SQL)

# 開発環境
* Mac (M1)
* Rails 6
* ruby 2.7.5
* mysql 12

# docker化する流れ
1\. 必要なファイルを準備

2\. コンテナイメージのビルド

3\. Rails プロジェクトを作成

4\. データベースの準備

5\. 必要なパッケージをインストール

6\. コンテナを起動

7\. 動作確認

## 1\. 必要なファイルを準備

### 空ファイルの準備

まずは rails-docker ディレクトリローカルの中に
以下の 5 つの空ファイルを作成しましょう。

Dockerfile
docker-compose.yml
Gemfile
Gemfile.lock
entrypoint.sh

“` touch {Dockerfile,docker-compose.yml,Gemfile,Gemfile.lock,entrypoint.sh} “`
上記のコマンドを入力するとファイルが一気に作成できます。
作成できたら、Gemfile.lock 以外の 4 ファイルを編集していきます。

### Dockerfi

元記事を表示

AWS ECS の production 環境に rails db:migrate する手軽な方法

RDSにはlocalから直接接続できるようにしておく
database.yaml などで必要な接続設定をしたらlocalからでも直接migrateを実行してしまえば良い

あくまで手軽な方法なので本番運用ではちゃんとやること
(ちゃんとの中身はまだ分からないのだが)

# コマンド例

“`
RAILS_ENV=production rails db:create
RAILS_ENV=production rails db:migrate
“`

# database.yaml の例

“`yaml
default: &default
adapter: mysql2
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000

production:
<<: *default host: *****.ap-northeast-1.rds.amazonaws.com username: username database: databasename password: passwor

元記事を表示

ransackのチェックボックスをtrue/falseで返したい

# はじめに
ransackのチェックボックスを使用した時にはまったのでメモを残します

# 前提
以下のadminテーブルに退職者カラムがあります。

“`
class Admin < ApplicationRecord endsuspended :boolean default(FALSE), not null end ``` ・endsuspended:true(退職している) ・endsuspended:false(退職していない) View で下記のようにチェックボックスを実装しようとしています。 チェック有り・・・全員表示 チェック無し・・・退職していない人だけ表示 ※初期表示は、チェック無しの退職していない人だけ表示させたい ``` = search_form_for @search, url: admin_admins_path do |f| = f.check_box :suspended_eq, checked: @suspended, class: "check-box" ``` # はまったところ Rancackでチェックボックスをチェックし

元記事を表示

RSpec長くなりがちなので短くしたい it_behaves_like

## 背景
Rspecで条件が一部違うが比べるところは大体同じみたいなテストが多かった

そこで `it_behaves_like` を使う

## 用途

テストのit部分を使いまわす

## 使用例

##### `it_behaves_like`使う前

“`Ruby
describe ‘仕事する’ do
subject { instance.test_suru_method }

let!(:instance){ Factory.no_yatu }
let(:target){ Factory.no_yatu }

context ‘conditionsが良いとき’ do
let(:conditions){ “good” }

it ‘仕事すること’ do
is_expected
expect(instance.published).to eq true
expect(instance.work).to eq (target.work)
expect(instance.conditions).to

元記事を表示

DockerでRails+React+dynamodb-local環境をつくりたい

# はじめに
以前にGo+React+MySQL環境をつくる記事を投稿したのですが、

https://qiita.com/does_not_exist/items/b79b3fd51ea6ef39df23

GoをRailsに、MySQLをdynamodb-localに変更する機会があったので簡単にまとめてみます。
Reactに関しては同じ手順になるので割愛します

# ディレクトリ準備
“`
sample-project
┣ docker
┃ ┣ backend
┃ ┃ ┗ Dockerfile
┃ ┣ react
┃    ┗ Dockerfile
┣ .env
┣ docker-compose.yml
“`

# ファイル準備

“`.docker/react/Dockerfile
FROM node

RUN apt-get update
“`

“`.docker/backend/Dockerfile
FROM ruby:2.7.5 as base
RUN apt-get update && apt-get install -y build-es

元記事を表示

テーブルを統合する

# はじめに
テーブルの統合することがあったので、手順を忘れないように記載します。

# 要件
approachesテーブルをinformationsテーブルへ統合する

# 目次

1. [カラム追加する](#カラム追加)
1. [データをコピーする](#データコピー)
1. [テーブルを削除する](#テーブル削除)



# カラム追加
approachesテーブルにしか存在しないのは以下です。
・mail_address
・facebook
・line

#### マイグレーションファイル作成
マイグレーションファイルを作成して、統合元テーブルにしか存在しないカラムを統合先テーブルに追加する

“`
rails g migration add_columns_to_informations
“`
#### マイグレーションファイル編集

“`
class AddColumnsToInformations < ActiveRecord::Migration[5.2

元記事を表示

rails7 devise action mailerにてパスワード再設定メールを送ろうとするとNil location provided. Can’t build URI.が出る件

## 前提条件
– Rails 7.0.4
– Devise 4.8.1
– actionmailer 7.0.4

## 事象
パスワード再設定用ページから宛先のメールアドレスを入力し、送信ボタンを押下すると下のエラー画面が表示される
![スクリーンショット 2023-02-07 12.18.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411851/1dad91ad-984a-59a4-c083-86a61924c4fa.png)

![スクリーンショット 2023-02-07 12.18.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411851/478ab7c8-1965-d3a4-44de-4037b00cc939.png)

## 対応
フォームのturboを無効化する

:::note warn
この対応は応急処置です!
Deviseの4.9.0のバージョンでは解決されるようですd(^_^o)

元記事を表示

Ruby slice!メソッド

# slice!メソッド
配列や文字列から指定した要素を削除し、削除したあとの要素を返します。
「 ! 」の付くメソッドは***破壊的メソッド***と言います。

## 破壊的メソッド
元の配列や文字列そのものを変化させてしまうメソッドのことを破壊的メソッドと言います。
ちなみに、調べてみると「 ! 」が付かない破壊的メソッドもあります。
勉強する必要がありますね!

## slice!メソッドの例

“`ruby
string = “おはようございます!”
string.slice!(2)
puts string
#=> “おはうございます!”
# 2番目の要素の「 よ 」が取り除かれて、返ってきた
“`

# slice!メソッドを使って任意の文字列を部分的に削除するプログラムの作成

条件は以下の通りです。
– 対象となる文字列からn番目の文字を削除すること
– 削除された文字以外の文字列を出力すること

“`ruby
def string(str, n)
str.slice!(n – 1)
puts str
end
# 以下は呼び出し例
string

元記事を表示

【備忘録】Ruby 2.7で RubyXLを使っているとFrozenError can’t modify frozen String: “” というエラーが出る

Ruby2.7のバージョンを2.7系に上げたときにRubyXLを使っているファイル内で“`FrozenError can’t modify frozen String: “”“`というエラーが出るようになりました。

#### 結論

rubyXLを3.4.11以上のバージョンに上げることで解消された。

#### 原因
調べてみるとrubyのバージョンを2.7にあげた時に、gemのバージョンが追いついておらず同じエラーが起きたという記事がありました。
Ruby2.7からnil.to_sがfrozen stringを返すようになったことが原因のようです。

以下のcommitで修正されたようなので、バージョン3.4.11以降であれば動くと思います。

https://github.com/weshatheleopard/rubyXL/commit/f0ed6a28dd4f5a1b39e64123be6dbfcdee439145

元記事を表示

[Rails]既存カラムのデフォルト値を変更する方法

# 前提
ユーザー(User)テーブルに管理者フラグ(admin_flag)があるとします。
今回はデフォルトをtrueからfalseに変更してみたいと思います。
*今回はboolean型を操作しますが数値/文字列でも同様に変更可能です。

“`
Table name: users

admin_flag :boolean default(TRUE)
“`

# 手順
## マイグレーションファイルを作成
デフォルト値変更のためのmigrationファイルを作成します。
今回はデフォルト値を変更するので
“`Change[カラム名]DefaltTo[テーブル名]“`
というマイグレーションファイル名にしています。

具体的には
“`rails g migration ChangeAdminFlagDefaultToUsers“`
でファイルを作成しました。

## マイグレーションファイルの中身を記述
実際に書くのは1行追加だけになります。
“`ruby
def change
# change_column_default :テーブル名, :カラム名, from:

元記事を表示

[Rails] タグ機能/タグ一覧ページの実装

# はじめに
タグ機能をgemを使わず、実装するための忘備録です。
設計は、中間テーブルを使うToxi法、といわれる形式で作成します。

# 実行環境
– Rails 7.0.4.1
– Ruby 3.0.4
– Devise 4.8.1

# 実装
### 1. アソシエーション
![タグ機能.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118527/ffe07c55-d7d6-7846-7247-1ba43c8615c7.png)
articlesテーブルとtagsテーブルを多対多でつなげます。
こうすることで、tagの編集をしたいときに、それぞれのarticleを編集する必要がなくなります。

注意する点は、articlesテーブルとtagsテーブルは親子関係にはなっていないことです。
そのため、modelに dependent: :destroyとつけても articleの削除と同時に、tagは削除されません。
>構造を考えれば、当たり前なのですが、articleを削除してもtagが消えず

元記事を表示

AWS ECS のハンズオンを参考に Rails を ECS にデプロイする例

# 前提

前提としてECSの公式ハンズオンを完了しており、Hello Worldと表示されるWebアプリが動作したところまで進めていること

https://catalog.us-east-1.prod.workshops.aws/workshops/7ffc4ed9-d4b3-44dc-bade-676162b427cd/ja-JP/5-ecs/2-ecs

VPC/セキュリティグループ/ECSクラスタなどはそれぞれ作成できていること

# rails new でプロジェクトを作成する

localで作成

`rails new example`
`cd example`

# hostsの設定

development環境でデプロイさせる場合は、Railsアプリにアクセスできるようにhostsを編集する
(本来であればproduction環境でデプロイすべきだろうが、本記事ではRailsの起動が目的なので省略する)

`config/environments/development.rb`

“`rb
require “active_support/core_ext/int

元記事を表示

Ruby on Rails – local で RAILS_ENV=production でサーバーを起動してもつながらない場合 (コンソールにも何も表示されない)

# 解決

production環境では画面にもコンソールにもエラーが出力されていないのがデフォルトのようだ。これが理由だった。

環境変数を指定してコンソールにログを出力することで解決した。
これで単にルーティングエラーが起きていることが分かるようになった。

“`
RAILS_LOG_TO_STDOUT=1 RAILS_ENV=production rails server
“`

# コンソール出力の例

“`
RAILS_LOG_TO_STDOUT=1 RAILS_ENV=production rails server
=> Booting Puma
=> Rails 7.0.4.2 application starting in production
=> Run `bin/rails server –help` for more startup options
W, [2023-02-06T22:12:58.122114 #44354] WARN — : You are running SQLite in production, this is genera

元記事を表示

EC2へのdeploy時にmini_racerでエラー

Rubyのバージョンアップ対応でめちゃくちゃはまった・・・
今更ながらRuby2.5.1からひとまず2.7.7(bundler 2.4.6)へ(この後3.2.0にアップデート予定)

開発環境では順調に進むものの、capistranoを使ったdeployがまったくうまくいかない・・・
インフラ系に弱いのでまじで泣きそうだったー

とくにmini_racerとかlibv8-nodeとか、ちょっと調べるといろんな人がはまっているところに同じようにはまりました

“`
01 current directory:
01 /var/www/{appli}/shared/bundle/ruby/2.7.0/gems/mini_racer-0.6.3/ext/mini_racer_extension
01 make “DESTDIR=”
01 compiling mini_racer_extension.cc
01 linking shared-object mini_racer_extension.so
01 g++: エラ

元記事を表示

Rails5でAwesomeを使うときの注意

## 環境
– Rails5.2
– Awesome4、Awesome5

## はじめに
Rails5の環境でAwesome6を動かそうとしたところ、エラーが発生して、Railsが起動されなくなりました。
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94029/0237251d-f7dd-ca0a-7d2e-d6d6cbd21086.png)

バージョンを落として、Awesome5(Awesome4でもOKです)で動かすと、正常にRailsが起動され、Awesomeのアイコンも表示できるようになりました。そのときの、トラブルシュート記事です。

## Awesomeの導入
Awesome4、または、Awesome5を使う場合、Gemfileに、Awesomeのgemを指定します。バージョンはしっかりと指定します。バージョンを指定しないと、最新のAwesome6がインストールされることになります。マイナーバージョンには、一番高いバージョンを指定しておいていいでしょう。
“`Gemfile

元記事を表示

Renderからメールが来たため翻訳してみた

# Renderからメールが来た
英文だったため、Googleの翻訳機能を利用してどんな内容だったか書き留めておこうと思います。

“`
Hi there,
Your free plan database, xxxx_production, has been suspended. Your database will be inaccessible unless you upgrade to a paid plan.
If you don’t wish to upgrade to a paid plan, your database and all backups will be deleted in 14 days, please make sure to backup your data prior to this.
You can read more about free plan databases in our docs.
If you have questions, feel free to reply to this email and we’ll get back

元記事を表示

Ruby インスタンスを生成してプログラムを作成

# インスタンスの生成を行ってプログラムをつくる

ターミナルで、以下のように出力されるようプログラムを作っていきます。

“`ruby
採れたて新鮮な果実です
リンゴは120円です
オレンジは200円です
イチゴは60円です
# ターミナル
“`

“`ruby
class Fruit

def self.fresh
puts “採れたて新鮮な果実です”
end

def initialize(name, price)
@name = name
@price = price
end

def introduce
puts “#{@name}は#{@price}円です”
end
end

apple = Fruit.new(“リンゴ”, 120)
orange = Fruit.new(“オレンジ”, 200)
strawberry = Fruit.new(“イチゴ”, 60)

Fruit.fresh
apple.introduce
orange.introduce
strawberry.i

元記事を表示

簡単!WSL2でRails6(Ruby3系)の環境を構築してVSCodeからrails newするまでのTips♪

# はじめに
こんにちは~~
本当は昨年の [DMM WEBCAMP mentor Advent Calendar 2022](https://qiita.com/advent-calendar/2022/infratop_mentor) :christmas_tree: の最終日に当日ギリギリで滑り込む予定でしたが、諸事情 ~~怠惰~~ があって2ヶ月経ってしまった @Keichan_15 が執筆する25日目最終日…そんな記事です(笑)今までの記事よりもボリューミーで濃い内容に仕上げました。温かい目で見てね:v:

最近受講生さん対応をしていると、Cloud9の調子が悪いんですよね~~ってお話をよく聞きます。どうやら東京リージョンのリソースが枯渇してるっぽい…?
障害情報は過去分を漁っているのですが、ちと見当たらず…。軒並み東京リージョンで環境構築した方は頭を悩ませていることでしょう。

https://health.aws.amazon.com/health/status

そんなこんなの状態で `rails new` してCloud9で開発を始めると「重すぎてCloud9動かせま

元記事を表示

モジュールバンドラとは

# はじめに

#### ※以下の内容には誤りが含まれる可能性があります

モジュールバンドラについて学んだことを書いていきます。

# 具体的な内容

# モジュールバンドラとは何か

複数のモジュールを一つにまとめて、依存関係を解決して、まとめるものを言います。

# モジュールバンドラで何ができるのか

複数のモジュールを一つにまとめることで、HTTPリクエスト回数を減らすことができます。
一度に処理できるリクエスト数に限りがあるため、回数を減らすことが表示速度の、パフォーマンスの観点で優れていると言えるからです。

## その他にできること

CSSにブラウザごとのprefixを付与する。

JavaScriptでモジュールのインポート。

パッケージマネージャーをnpmで一本化。

node.js のモジュールをブラウザ上で使う。
 →node.js 向けに作られたモジュールもインポートできる

# まとめ

JavaScriptの足りない部分を補う形で色々なツールが生まれたんだと知ることができ

元記事を表示

OTHERカテゴリの最新記事