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

Rails関連のことを調べてみた2022年07月20日
目次

初心者向け enum の導入

既存のusersテーブルにenumを導入しようとしたら色々課題があったので記事にしました。
ユーザーの性別や年齢層をセレクトボックスで入力できる仕様にしたい。

– `devise`によりログイン機能が実装されている
– 以下のusersテーブル

| カラム名 | データ型 | 備考 |
|:-:|:-:|:-:|
| email | string | deviseにより導入済み |
| password | string | deviseにより導入済み |
| nickname | string | deviseに追加した |
| gender | integer | deviseに追加した |
| age | integer | deviseに追加した |

# enum の設定
Userモデルにenumの定義をしていく。
“`rb:models/user
class User < ApplicationRecord devise :database_authenticatable, :registerable, :rememberable, :v

元記事を表示

==は「同値性」を、.equal?は「同一性」を判定しているらしい(Ruby)

## はじめに

今回はRubyにおける比較演算子`==` と`.equal`の違いについて簡単にまとめてみました。

タイトルを読んでもピンと来ない方には、ある程度意味のある記事になっていると思うので読んでもらえると嬉しいです。

## 対象読者

– `==`と`.equal?`の違いを理解せずに使っている人
– 「同一性」「同値性」と言われてもピンと来ない人
## 結論

いきなりですが結論です。

`==`と`.equal?`の違いは「**同値性を判定している**」か、「**同一性を判定している**」かです。

…タイトルのままですね。

あまりにも説明になっていないので、以下から詳しく解説していきます。

そもそも「同一性」「同値性」とは

– 同一性:参照値が同じオブジェクトを指していること(*1)
– 同値性:オブジェクトが同じ値を持っていること(*1)

(*1 『[独習Ruby](https://www.amazon.co.jp/dp/479816884X)』から引用)

を意味しています。

具体例を使って説明します。

“`ruby
array1 = [‘a

元記事を表示

rails new で発生したエラーについて

### __bundlerによる不具合__
今回、railsの環境構築の際にハマりかけたエラーについて備忘録としてまとめておきたいと思います。

### __概要__
railsのインストール等が完了し、新規プロジェクト作成の際にrails newを行ったところエラーが発生。

主なエラー表記は下記の通りとなります。
“`
(defined?(@source) && @source) || Gem::Source::Installed.new
“`

調べてみると、bundleそのものの不具合のようでこの時に使用していたバージョンはBundler version 2.3.7でした。

なので、以下の手順でbundlerのバージョンアップを行い、再度新規プロジェクト作成したところ問題なく完了しました。

“`
#現在のbundleのバージョンを確認
$ bundle –version
Bundler version 2.3.7

#最新バージョンへアップグレード
$ gem install bundler
Fetching bundler-2.3.18.gem
Successf

元記事を表示

【rails,ransack】参照先テーブルの統計カラムでソートした検索結果を表示

アプリ開発を2週間で終わらせると宣言して、現在5週目の者です。見通しの甘さと、作り始めると予想以上に入れ込んでしまった結果ここまで開発期間が伸びてしまいました。今週末で一旦アプリ開発を終了する予定です。その後公開予定ですのでよろしかったら使ってみてください。

今日は検索機能を強化するため、ransackという検索機能を楽々実装できるGemを利用しました。
私のアプリの具体的な弱点は、文字検索とソート検索が両立しなかった点です。これを解決しました。
![スクリーンショット 2022-07-20 6.29.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2707093/872059ca-4b6c-3c57-6afe-2c4e718aa5fb.png)
Gifも一応載せておきます。やっていることは文字検索をし、その後ソートボタンを押すと、文字検索結果内でソートが実行されます。
https://gyazo.com/6d1b192a90647826c86b75bc1cea5f63

# 今回の問題(タイトル

元記事を表示

【Ruby on Rails】enumの導入・日本語表記の方法

# 開発環境
Rails 6.1.4
ruby 2.6.3

# 目次
– gemを導入
– enumを定義する
– enumの日本語化
– enumの紐づけ
– 確認

## gemを導入
まずはgemを導入します。

“`ruby:Gemfile
gem “enum_help”
“`
記述後、enum_help をインストールするために `bundle install`を行いましょう。

“`ruby:ターミナル
$ bundle install
“`

## enumを定義する

gem導入後、実際にenumを定義し、数値と文字列を紐付けします。
今回は数値と文字列を紐づける流れを、支払い方法のクレジットカード・銀行振込を例に解説します。

モデルは`Orderモデル`で定義します。

“`ruby:Order.rb
enum payment_method: { credit_card: 0, transfer: 1 }
“`

## enumの日本語化

先ほど定義したenumを日本語化します。

“`ruby:config/application.

元記事を表示

enumの使用方法/使用例

## 環境

・Ruby 2.6.4

・Rails 5.2.3

# enum(enumeration: 列挙)とは

・数値のカラムの対してプログラム上で別名を与える役割。

・名前を整数の定数に割り当てるのに使われるデータ型

・名前に数値を割り当てることで、コードの可読性を上げて、かつ不要な不具合を防いでくれるもの

・ActiveRecord::EnumはRails 4.1で導入された。enumの属性値はデータベース内の整数に対応付けられるが、クエリでは名前で参照できる。

・• enum型の定数は定義されている以外の値を受け付けない(例外が発生)

# 使用方法

1.usersテーブルにenum用のカラム(roleカラム,データ型はinteger型)を追加

2.userモデルにenumの定義をする

## 1.usersテーブルにenum用のカラム(roleカラム,データ型はinteger型)を追加

“`ruby
rails g migration AddRoleToUsers
“`

“`ruby
class AddRoleToUsers < ActiveRe

元記事を表示

HTMLの基礎知識(詳細ページに星機能実装)

皆さんこんにちわ!!

今日もプログラミングしていますか?:point_up:

今回は詳細ページに星機能をつけていく機能を紹介します!!

注意:大前提としていいね機能を実装していないと実装できません!!:sunny:

![スクリーンショット (55).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738887/e03d307f-eacf-d115-c661-df4361748feb.png)

Step1:星機能(詳細ページ用)の中間テーブルとアソシエーションを組む!!!

“`ruby:.ターミナル
rails g model Review eve:integer user:references tweet:references

rails db:migrate
“`

Step2:userとtweetのモデルにアソシエーションの情報を打ち込む!!!

“`ruby:app/models/user.rb
has_many :review

元記事を表示

VScode上でSQliteを操作する方法

# 目的
Railsでアプリを作っている際に、VScode上でテーブルのデータを操作したいと思いました。
本記事では

+ VScode上でテーブルを確認する方法
+ VScode上でテーブルのデータを操作(追加、編集、削除)する方法

についてまとめています。

# 今回使用するテーブル
今回はRailsにて簡単な名簿アプリを作成しました。
GitHubにアップロードしていますので、下記から自由にダウンロードしてください。
https://github.com/ysk91/name_list

本アプリ内では`people`というテーブルを用意しました。
まずはアプリ上の「新規作成」か`db>seeds.rb`かでデータを適当に作ります。

# VScode上でテーブルに格納されたデータを確認する
VScode上でSQliteを見るには、「sqlite3」という拡張機能を使用します。
インストール方法はこちらの記事を参考にしてください。
[VSCodeでSQLiteを使うなら拡張機能を使う(sqlite3のバイナリファイルを見る方法)(Qiita)](https://qiita.co

元記事を表示

WARNING in asset size limitの対処法について

# 概要
– __起こった現象__:
EC2でデプロイしたアプリにアクセスできない

– __エラー概要__:
“`:ec2内のターミナルにて
Rails assets:precompile RAILS_ENV=production
“`
このコマンドでアセットをコンパイルしようとすると以下のエラーが出る。
![asset size limit.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2661107/e5ef7aba-4ce7-b9d2-d5db-bd8ddf2302cd.jpeg)

## 仮説と検証
このエラーから、「アセットファイルがリミットを超えている」と理解しました。
対処法として、「サイズが超えているファイルを特定して対処する」
もしくは「サイズの上限を上げる」このどちらかになると思い調べました。

### 検証1(サイズが超えているファイルを特定して対処する)
エラー文を見ると、`js/application-0bc4a48eadb9d940687.js.map.gz`
という

元記事を表示

初めてのRailsチュートリアルに挑戦!第6・7章

# 第6章の学習内容
1. データベースの移行
1. modelファイル
1. ユーザーオブジェクトを作成する
1. ユーザーオブジェクトを検索する
1. ユーザーオブジェクトを更新する
1. 有効性を検証する
1. 存在性を検証する
1. 長さを検証する
1. フォーマットを検証する
1. 一意性を検証する
1. ハッシュ化されたパスワード
1. ユーザーがセキュアなパスワードを持っている
1. パスワードの最小文字数
1. ユーザーの作成と認証

# 第7章の学習内容
1. Usersリソース
1. debuggerメソッド
1. Gravatar画像とサイドバー
1. ユーザー登録フォーム
1. ユーザー登録失敗
1. Strong Parameters
1. エラーメッセージ
1. 失敗時のテスト
1. ユーザー登録成功
1. 成功時のテスト
1. プロのデプロイ
1. 本番環境でのSSL
1. 本番環境用のWebサーバー
1. 本番データベースを設定する

# 学習を終えて
第6章では、ユーザモデルの作成する際に、有効性や存在性、一意性を検証しながら進めることの大切さを学ん

元記事を表示

理解するのが難しいシステムをドメインモデリングによって生産性をあげた話

Azit株式会社でバックエンドエンジニアとして機能開発の他にDDDの導入やリファクタリングをしている鈴木です。

私が弊社で仕事をするようになってから半年たちましたので、ミノ駆動さんとQiitaさんのキャンペーンを利用して、私がおこなったことを振り返りたいと思います。

# システムの説明

最初に開発しているシステムについて説明をします。
ラストワンマイルの配送に特化しているシステムを開発しています。
荷物の配送を実施してくださる配達パートナーと、配送の依頼をしてくださるクライアントという2つの種類のユーザーを扱う配送サービスです。

配達パートナーさんは以下の3種類にわかれます

– ギグワーカーとして単発の案件を実施してくださる方々
– 私たちと連携してクライアントさん専属のシフトに入ってくださる方々
– クライアントさんが直接管理しておられ我々のシステムを通して稼動している方々

また、配送については以下のようなフィルタリングがあります。

– クライアントさんが自社で管理されている方々と弊社からの専属の方々両方に送りたいといった場合や、逆に自社で管理されておられる方のみに送り

元記事を表示

herokuでアップしても ローカルと同じ動作をしない。

発生状況

ローカル環境で動作確認済み

“`
heroku run git up master
heroku run rails db:migrate
“`
してもローカルと本番環境で同じ動作をしない。

エラー確認

FATAL周りに
“`
ActiveModel::UnknownAttributeError (unknown attribute ‘item_name’ for Item.

status=500
“`
有りのためどうやらDBまわりでのエラー
DBをUP/DOWNして書き換えたのが理由のよう。

修正内容

現状ローカル環境のマイグレートファイル、その他記述が間違っていないことを確認。

“`
% heroku run DISABLE_DATABASE_ENVIRONMENT_CHECK=1 rails db:drop db:create db:migrate
“`
を(heroku上のDBをdrop,create,localと同じ状態にmigrate,全て行うコマンド)実行する。
で解決。

元記事を表示

RubyのMix-in(ミックスイン)について

### モジュール(module)による共通化(MiXx-in)
**モジュール** は、クラスと同じようにインスタンスメソッドを定義することができる。
ただし、モジュールはクラスとは異なり、オブジェクトを生成することができない。
モジュールは、一連の振る舞い(メソッド群)を表し、それをまとめてクラスに取り込むために存在する。

また、クラスにモジュールを取り込むには、includeメソッドを使用する。

“`
// class Dog
// include Chatting
// end

// *これは、DogクラスにChattingモジュールの一連が取り込まれたということを表す。

// > pochi = Dog.new
// > pochi.chat
// > “ワン”

“`

また、モジュールは「部分的な設計書」を表し、クラスという「設計書」に取り込むことで、複数の似たようなクラスを簡単に作成できる。

さらに、1つのクラスに複数のモジュールを取り込ませることができる。

“`

// module Chatting
// def chat
//

元記事を表示

Rubyの「継承」と「オーバーライド」について

## 継承
既存のクラスの機能を引き継ぎ、一部を変えて利用する仕組みのこと。
例えば、、、

“`
// class Product < PricedObject // attr_accessor :price // end ``` この時、PricedObjectのように、機能を継承する元となるクラスのことを **「親クラス」** または **「スーパークラス」** という。 逆に親クラスから見た時に、自分を継承しているクラスのことを **「子クラス」** または **「サブクラス」** という。 つまり、上記の状況としては、ProductクラスがPricedObjectクラスを継承している。 ## オーバーライド 親クラスが持つメソッドの処理を子クラスに書かれた処理で上書きすること。 ``` // class Book // def title // ‘本のタイトル’ // end // end // class Magazine < Book // def title // ‘雑誌のタイトル’ // end /

元記事を表示

Railsのproduction.rbはどういう事が設定できるの?全ての設定を調べてみた!

## なぜ記事を書こうと思ったか
Railsのproduction.rbでどのような設定をしているか及びどのような設定ができるかを確認する為に調べたので、備忘録として残します。

## production.rbのコマンド説明
– config.cache_classes = true
ソースコードをリロードしない。キャッシュが適用される。

– config.eager_load
Railsのapp以下にあるクラス(ModelやController)を起動時に全て読み込むかどうか設定

– config.consider_all_requests_local
すべてのエラーをブラウザに表示をするかの設定
例:Routing Errorなど詳細なエラー情報が表示される。

– config.action_controller.perform_caching
アプリケーションのキャッシュの有無

– config.require_master_key = true
ENV[“RAILS_MASTER_KEY”]環境変数またはconfig/master.keyファイルでマスターキーを取

元記事を表示

[Ruby] WSL2上のUbuntuに立ち上げたDockerコンテナ内のRuby SDKをIntelliJのWSLプロジェクトでProject SDKとして扱うことは出来ません!

めちゃくちゃ長いタイトルになってしまいました、タイトル通りです。
どうやら以前はタイトルの様な事が出来ていたみたいなのですが、現在はSDKとして登録することは出来ても、Project SDKの利用可能なSDK一覧に出ないようになっているみたいです。

::: note info
しかし現在開発リクエスト
– [Ability to select remote interpreter for new projects](https://youtrack.jetbrains.com/issue/RUBY-18210/Ability-to-select-remote-interpreter-for-new-projects)

として挙がっているので困っている方は是非投票してください。私も困っています。
:::
***
タイトルの問題については上記の内容で全てですが、以下に私がこの問題に直面するまでの詳細な経緯を書いていきます。

# やりたくて出来なかったこと
WSL2上のUbuntuにDockerを利用してRailsの環境を作成、ホストのIntelliJからプロジェクトを開いてSDKとし

元記事を表示

【Rails】メガ級の大量データをseedで入れたいとき

# はじめに
[以前書いた記事](https://qiita.com/koki_73/items/2ebee06bf16c416aefa8)で100万件のレコードを用意したことがあったのですが、せっかくなのでその方法を紹介します。

ついでにちょっとした検証もしたのでそれも紹介します

# 結論はよ
* 大量データの作成は`activerecord_import`を使おう
* 処理の時間を測ってみたらかなりの差が出たよ

中級者以上のかたにとっては当たり前という内容かもなので、「あ、そういう内容ね」とここで想像できた方はこのタイミングでブラウザバックしてもらって構いません笑

# やり方

### Gem

先に使うgemを紹介します
“`ruby:Gemfile
gem ‘activerecord-import’
gem ‘seed-fu’
“`

`activerecord-import`というgemは大量データを作成する際に使われることが多く、簡単に説明すると作成したい大量のレコードを元に1つのSQL文を作成して、それを実行してくれるものです

詳しい使い方などはここでは解

元記事を表示

docker-compose up を Ctrl+c(SIGINT) で停止させた時に ERROR: 2 になってしまう問題の対処法

:::note warn
警告
本記事は仮説を提示しているだけで、根本的なエラー原因を断定しているわけではありません。
:::

# 問題の発生状況

## 環境
Rails, PostgreSQL構成のWebアプリケーションをDockerで包んで開発していました。
それぞれのバージョンは下記の通りです。
“`plaintext
$ docker-compose -v
docker-compose version 1.29.2, build 5becea4c
$ docker -v
Docker version 20.10.12, build e91ed57

$ ruby -v
ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) [x86_64-linux]
$ rails -v
Rails 7.0.3.1
$ postgres –version
postgres (PostgreSQL) 14.4 (Debian 14.4-1.pgdg110+1)
“`

## 遭遇した問題
`docker-compose up`をフォアグラウンドで実

元記事を表示

【要反省】入社してから半年間において先輩からのレビューで指摘されたこと5選

## はじめに

どうも、こんにちは。もきおです。
未経験から自社開発企業に転職し半年が経ちました。あっという間の半年間でしたがその間色々ありがたいことにレビューをいただきました。なので今回は半年前の入社した自分に送る言葉的な感じでレビューで指摘されたことを書き起こしておきたいと思います。

最後に対策的なとこも記載しているので最後までご覧いただけますと幸いです。ちなみに弊社はRuby、Railsメインで使用しているのでちょくちょくRubyのメソッドとか出てきます。他の言語使用されている方は適当にあしらってもらえればと笑

## 指摘1: コードちゃんと読んだ?
これは言われることが最も多かった指摘でしたね。何回かこの指摘を受けた時、コードをちゃんと読むってなん何だろう?と疑問に思ったので具体的なポイントを聞いてみました。

* 分からない箇所を分からないままで読み進めない
* 想像で決めつけて読み進めない
* 一つ一つデバックして確認する

### 分からない箇所を分からないまま読み進めない
企業のコードはポートフォリオと比にならない程のコード量ですよねー。そのためついつい各コードの

元記事を表示

正規表現についてまとめてみた

はじめに

正規表現について学んだが、初学者の自分にとってとっつきにくかったため自分なりにまとめてみた内容になっています。
他の初学者の方で同じように思った方の参考になればと思いまとめていきます。

:::note info
正規表現とは文字列に特定の文字が含まれているか確認したり、特定の文字を取り除いたり、置き換えるときなどに使用する
:::

正規表現

|正規表現の例 |意味 |使用例 |
|:————-:|:—————————–:|:————————–:|
|[] |囲まれた文字のうちいずれかにマッチすること|name.match(/[a-z]/)=>aからzのいずれかに当てはまるか|
|a-z|aからzまでの文字、-で範囲指定できる|上記の例を参照|
|\b|数字が含まれている|age.match(/[\d]/)=>数字が含まれて

元記事を表示

OTHERカテゴリの最新記事