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

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

Rails controller内に登場したbegin rescueとはなんぞや

#### はじめに
実務でバグ改修をしているときにcontroller内に次のような処理を見つけました。
~~~ ruby
def create
begin
# (通常のcreateの処理)
rescue エラーの種類 => e
# (eを使って色々書いてある)
end
end
~~~
beginというものが突如現れました。これはなんぞや?ifたいなものなのか・・・?
これまでRubyの中でbeginなんて記述をしたことがなかったので衝撃を受けました。
このままではバグ改修もできないので、「僕が出会ったこのbeginというものを僕はどれくらい知ってるんだろ〜」と思い、調べてみることにしました。
そうするとbeginを使用する際は基本的にrescueもセットであることもわかりましたので備忘録として残したいと思います。
もしもおかしな点や補足等ありましたら教えていただけると幸いです。

#### 環境(自分のPC)
Ruby 2.6.5
Rails 6.0.5

#### 前提
まず、singerモデル及びsingersコントローラーを作成し、singer.html

元記事を表示

Rails6.1で追加されたmissingがとてもエレガント

# 結論
ActiveRecordのmissingという関数を使えばこんなにエレガントになります。

“`ruby
# missingなし
Master.left_joins(:datas).where(datas: {id: nil})

# missingあり
Master.where.missing(:datas)
“`

# どういうこと?
missingは関連が無いデータを取得するときに使います。例えば
– 利用されていないマスターデータの一覧を取得する(上例)
– 所属する社員がいない部署の一覧を取得する(ex: `部署.where.missing(:社員)`)
– 画像が無い記事の一覧を取得する(ex: `記事.where.missing(:画像)`)

# どうやって利用するの?
has_one/has_many/belogs_toなどのアソシエーションが組んであれば利用できます。

なにはともあれ、missingって響きがカッコいいので多用したい。

# 参考
https://techracho.bpsinc.jp/hachi8833/2021_05_26/1

元記事を表示

form_withの引数について

使用環境
ruby6.1.6
rails2.6.3

# はじめに
はじめまして!プログラミングスクールでRailsを勉強し始めて3か月目の初学者です。備忘録を兼ねて、同じエラーで困っている方のお役に立てればと思います。

# form_with実装時のエラーについて
form_withを使用して、会員情報の編集を実装していた際の更新したいデータは送れているのに保存できなかったエラーの解決方法について書いていきます。

最初は以下のように記述していました。
変更前
“`ruby:app/views/public/users/edit.html.erb
<%= form_with model: @user, local:true do |f| %>
“`
“`ruby:admin/users_controller.rb
def update
@user = User.find(params[:id])
if @user.update(user_params)
redirect_to admin_users_path
else
re

元記事を表示

ActiveAdminの複数バリデーションエラー時の日本語化

# 環境
* rails7
* ActiveAdmin

# 概要
バリデーションに複数引っかかった場合に
「◯◯が入力されていません and △△が正しくありません」と表示されてしまいます。

# 対処
日本語化対応するためにja.ymlの以下に値を変更すればOK!!

“`config/locales/ja.yml
ja:
support:
array:
words_connector: “, ”
two_words_connector: ” and ”
last_word_connector: “, and ”
“`

元記事を表示

【Rails6】deviseのログイン時にエラーが出て認証されないときの対処

## はじめに
`devise`というgemを使用してユーザログインしようとしたときに `Completed 401 Unauthorized` というエラーが吐き出されたので、備忘録として解決策を残しておきます。

今回deviseのモデルとして`user`モデルを作成していますが、適宜ご自身が作成したモデル名で読み替えてください。

また、初めての記事投稿なので拙い文章になることが予想されますが、悪しからずご了承ください。アドバイス等いただけますと幸いです。

## 開発環境
`Cloud9` `Ubuntu 18.04`
`Rails 6.0.4`
`Ruby 2.6.3`
`MySQL 5.7.38`

## 前提
モデル(`app/models/user.rb`)は以下のコマンドで作成済み。
“`bash:ターミナル
rails g devise user
“`

コントローラ(`app/controllers/users/*`)は以下のコマンドで作成済み。
“`bash:ターミナル
rails g devise:controllers users
“`

元記事を表示

「LSEP」という不可視文字の削除方法

[バヅクリ](https://buzzkuri.com)CTOの合原です。
今回、非エンジニアからの依頼で、「LSEP」という記号?文字?の除去作業をシュッと行ったので、まとめたいと思います。

## 前提
当社[バヅクリ](https://buzzkuri.com)では、下記のように、オンラインで、
チームビルディングや研修を目的としてオリジナルのプログラムを提供しています。

とても、とても簡単に説明すると、、、

契約企業から特定のプログラムでのイベント開催の希望が発生すると、
アプリケーション上では、プログラムデータからイベントデータを自動生成しています。

プログラム、イベントそれぞれのデータについてCRUD処理が存在します。

![スクリーンショット 2022-07-20 17.04.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64537/b616cc8f-9030-d4a2-6b4c-1f822830e232.png)

通常企画チームにて、プログラムの入稿や更新、運営担当によるイ

元記事を表示

each文で出力するデータの数を指定したり順番をランダムにしたりする方法【Rails】

# 目的
テーブルからデータを取り出す方法としてeach文を使用するのは一般的ですが、大量のデータから指定したデータ数だけ取り出したいときや、データをランダムで出力したいというときに使用する方法についてまとめます。

本記事は

+ 出力する数を指定する
+ ランダムに出力する
+ 上記2つを組み合わせる

という構成で紹介します。

# 数を指定する
hogesテーブルから10個だけデータを取り出したいという場合は、コントローラとビューファイルで下記の設定をします。

“`ruby:hoges_controller.rb
# 対象のアクション内で
@hoges = Hoge.all
“`

“`ruby:viewファイル
<% @hoges.limit(10).each do |hoge| %>
# ~~~~~
<% end %>
“`
@変数に対して`.limit`メソッドをしてからeach処理をする。というシンプルな流れです。

`.limit`メソッド以外にも、新しいデータや古いデータから任意の数を取り出す方法もあります。
詳細は下記を参照してください。
[【ruby】

元記事を表示

Formオブジェクトで保存したデータを表示させるには

formオブジェクトで複数テーブルに保存したデータをページ上に表示させるのに苦労したので、忘備録として記録する。

## formオブジェクトのデータを取得したい
itemテーブルとmaterialテーブルがあったとする。
二つのテーブルを組み合わせて、`Item_material`クラスを定義した。

詳細ページにて、materialテーブルに保存したデータを表示するためにitemコントローラーに下記を記述した。
“`ruby
def show
@item = Item.find(params[:id])
@material = Material.find(params[:id])
end
“`
これではダメたった。material.idが@itemと同じidを取得してしまう。
例えばitem.idが4ならmaterial.idも同じ4になる。

## 成功したコード
“`ruby
def show
@item = Item.find(params[:id])
@material = @item.material
end
“`
これでいけた。この記述なら@it

元記事を表示

初心者向け 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

元記事を表示

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
//

元記事を表示

OTHERカテゴリの最新記事