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

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

Rails/webpackerのバージョン確認

# 書く理由
検索で見つけづらかったのでメモとして

# 確認方法

Railsの下記コマンドでwebpakerをインストールした際にできるpackage.josonに書いてありました。
~~~
rails webpacker:install
~~~
![スクリーンショット 2022-08-03 10.37.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468139/2c452e90-8560-e02f-89bf-e6a742bf5338.png)

元記事を表示

RubyでDSLが書きやすい理由を整理する

## これは何
Rubyは「DSLが書きやすい言語」という説明がされることがあります。
なぜRubyはDSLが書きやすい、と言われるのかを僕なりにまとめてみました。
「こういう要素もあるからだよ」などあればぜひコメントや編集リクエストをいただけると嬉しいです。

## DSLの例
DSLとは直訳するとドメイン固有言語です。
簡単なイメージで言うと、「ユーザーが自由に構文に近い仕組みを実装、提供できる」ようなものです。
詳しい説明はWikipediaにお任せします。

https://ja.wikipedia.org/wiki/%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E5%9B%BA%E6%9C%89%E8%A8%80%E8%AA%9E

RubyやRailsで使われているDSLで有名なものはActiveRecord周りの実装などでしょうか。
例を記載します。

“`user.rb
class User < ApplicationRecord validates :name, presence: true has_many :articles

元記事を表示

【OpenAPI】Railsのコードを自動生成してみた

# はじめに

`OpenAPI`を使用したRailsコードの自動生成を行いました。
以下のことを行ったので備忘録も兼ねてまとめます。

* OpenAPIドキュメントを作成・環境構築
* OpenAPIドキュメントからRuby on Rails のソースコードを生成(`OpenAPI generator`)
* Rails用のテンプレートの追加(`OpenAPI generator`)

実行結果は以下の GitHubにあげてます。

https://github.com/YujirouSakoda/OpenAPI-rails

# OpenAPIドキュメントを作成・環境構築
### ① `OpenAPI-rails`フォルダを作成
※以降の作業は`OpenAPI-rails`フォルダ下で行います。
“`console:console
mkdir OpenAPI-rails
“`

### ② OpenAPIドキュメントを作成(`openapi.yaml`)
“`console:console
type nul > openapi.yaml
“`
ファイルの中身は[Swag

元記事を表示

RailsとJavaScriptでマルチセレクタかつオートコンプリートを実装する

# 実装デモ
![maruti-select-rails.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324819/1961990a-1284-9889-b689-267552bdba31.gif)

# 機能説明
予約に対して、メンバーを複数アサインする機能。
Reservationと、Memberが多対多でアソシエーションされている。
メンバーのアサインを複数、かつ、入力補完(検索)しながらインタラクティブに選択肢を表示させる。

リポジトリはこちら

https://github.com/kakeruAoyama/myapp

# 環境
“`
$ ruby -v
=> ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux]
$ rails -v
=> Rails 7.0.3.1
“`
TailwindCSSをつかって実装していきます。

# アプリケーションの作成
“`
$ rails new myapp –css t

元記事を表示

Rails 画像投稿機能(CarrierWave)を実装する

## 始めに
現在ポートフォリオを作成中で、画像投稿機能を実装したくなった。どうやら`CarrierWave`というgemがあるらしいので実装してみる。

## CarrierWave とは
railsアプリに画像投稿機能を実装するための`gem`

|単語|意味|
|:-:|:-:|
|Carrier|運搬人、郵便配達員、新聞配達人、運送業者|
|Wave|波、波浪、波動、起伏、うねり|

公式ページ

https://github.com/carrierwaveuploader/carrierwave

## 公式ページ(README)を見てみる

>CarrierWave
This gem provides a simple and extremely flexible way to upload files from Ruby applications. It works well with Rack based web applications, such as Ruby on Rails.

この`gem`は提供します、Rubyアプリケーションからファイルをアップロードする

元記事を表示

【Rails】rails db:migrateが実行できない / PG::DuplicateTable: ERROR: relation “users” already exists / PG::ObjectInUse: ERROR: database “scaffold_app_development” is being accessed by other users

### 前提
Rails 6.1.6.1
ruby 2.6.6
database postgresql

### 実現したいこと
“`rails db:migrate“`をエラーなく、実行する。

### エラー内容の確認
“`rails db:migrate“`を実行したところ、次のようなエラーが出ました。
“`
rails db:migrate
Running via Spring preloader in process 31813
== 20220802023637 CreateUsers: migrating ======================================
— create_table(:users)
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

PG::DuplicateTable: ERROR: relation “users” already exists

Caused by:
A

元記事を表示

初心者学習メモ スネークケースとキャメルケース

## スネークケースとキャメルケース

プログラムを始めた際にスネークケース、キャメルケースという言葉を聞きましたが何のこと?
となったので簡単にまとめました。

スネークケースとは、単語の間を_でつなぐ命名規則です。
キャメルケースとは、単語の先頭を大文字にする命名規則です。

“`
hot_coffee スネークケース
HotCofffee キャメルケース
“`

### 命名規則をなぜ用いる?
命名規則がないと、関数や変数、class名がバラバラになり可読性が低くなります。
その結果バグの原因になったりもします。
仕事となればチームで開発することがほとんどです。
命名規則をしっかり守ることで、他の人が書いたコードでも変数なのか、関数なのか、classなのか判断ができるようになります。

初心者の私は、人によって見やすさが違い使い方は好みで違うのかな〜なんて思ってました…
実際はそれぞれの言語によって命名規則が決まっているみたいです。

### Railsの命名規則
クラス名 : キャメル
それ以外 : スネーク
定数 : 全て大文字

元記事を表示

【Rails】現場Rails Bootstrapが機能していない

# はじめに
本記事はプログラミング初心者が、「現場で使える RubyonRails5 速習実践ガイド」(通称)「現場Rails」で学習を進めていくにあたって、つまずいた点、バージョンの違いによるエラーが出た点などを解決した方法を備忘録も兼ねてまとめているものです。
そのため、記事の内容には誤りがある可能性があることをご理解ください。
誤りがあればお手数ですが、ご指摘いただければと思います。よろしくお願いします。

# 環境
Ruby 3.1.2
Rails 7.0.3.1
bootstrap 5

# 起きている問題
現場Rails5で新規登録画面を実装している時に、なんだか登録フォームがしっくりこない。いくらシンプルといえ、cssが機能していない気がするので、問題を見ていく。

![スクリーンショット 2022-08-02 12.31.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737125/43d1fe7b-36d8-10d5-d0ff-52e1d0b52d01.png)

まず、問題の

元記事を表示

rails 他人のユーザー情報、投稿情報を変更できないようにする。

初投稿です
railsで 他人のユーザー情報、投稿情報を変更できないようにする方法を記述していこうと思います
今回は、投稿情報のケースを紹介します(投稿に関するモデルはBookとし、Userモデルと関連づけているものとします。)
まず、以下のように記述します。
(こちらの記事は以下の記事を参照させていただいて作っております)
https://qiita.com/nao0725/items/47606b8975603a12fd5e

“`books_controller.rb
①before_action :correct_user, only: [:edit, :update]
def edit
:
end

def update
:
end

private

def correct_user
②@book=Book.find(params[:id])
③redirect_to(books_path) unless @book.user_id ==current_user

“`
①before_actionは各アクションが実行される前に呼びます。
詳細ページなどはどの

元記事を表示

Railsコールバック、ActiveRecord::Enum

### コールバックによる制御
**コールバックとは**
特定の処理に引っ掛けて別の処理を呼ぶことをコールバックと言います

メリット
* 前処理、後処理などを宣言的に書くことができる
* 必ず保存後に行いたい処理がある時に、実行の漏れを防ぐことができる

**コールバックの基本的な使い方**
(例)
本の名前を保存する前に、名前に”Dog”が含まれていた場合
“Dog Cute”と文字列を置き換える

~~~md:
class Book < ApplicationRecord 略 before_validation do self.name = self.name.gsub(/Dog) do |matched| "Dog Cute #{matched}" end end # メソッドを使って書くこともできます before_validation :add_Cute_to_dog(独自メソッド) def add_Cute_to_dog self.name = self.name.gsub(/Dog/) do |matc

元記事を表示

【個人開発】通勤時にQiitaのトレンド記事が届くLINE Botを開発した

## はじめに

今回は通勤時間を有効活用することができる、通勤時にQiitaのトレンド記事が届くLINE Botを開発しながら**Railsと外部APIの連携**、**LINE Messaging API SDKの使い方**、**LINE Flex Messageの使い方**を学んでいきます。

チュートリアル形式で実際にLINE Botの開発をしながら開発方法を解説していきます。

## この記事の対象者

– LINE Bot開発に入門したい人
– Railsと外部APIの連携手法を学びたい人
– 個人開発でLINE Botを作ってみたい人

## 目標成果物

LINE側から「出勤なう」と送られてきたタイミングでQiitaのトレンド記事上位5つを返すLINE Bot。

![IMG_7062.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2695521/cd79cc33-f523-2bf8-296f-882f7b242c66.jpeg)

## LINE Botについて

### LINE B

元記事を表示

【Rails】Userがいいねした投稿一覧作成

# はじめに
ユーザーがいいねをした投稿の一覧を見れるようにしたい。
しかし、users_path(indexアクション)は別の用途で使用している。
そこで、routesに新しいルーティングを追加し、専用のページを作成する。
**完成図**
![favorited_posts.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2684787/9d49289d-01ee-3f42-cb9b-6ad0d272478d.gif)

# 前提
使用環境は以下の通りである。
| No | 項目 | 内容 |
|—:|————-|————|
| 1 | OS | Mac |
| 2 | Ruby | 2.6.3 |
| 3 | rails | 6.0.4 |
| 4 | Kaminari | 1.2.2 |
| 5 |

元記事を表示

【Ruby on Rails】ActionTextとMathJax 3.2で数式を表示できる簡易エディターを実装する

# はじめに
個人開発にて、Action TextとMathJax(バージョン 3.2) で、簡易的ではありますが数式を表示できるエディターを作成しました。
– [Rails ガイドーAction Text](https://railsguides.jp/action_text_overview.html)
– MathJax
– [GitHub](https://github.com/mathjax/MathJax)
– [ドキュメント](https://docs.mathjax.org/en/latest/index.html)

左の画像のように数式を入力してプレビューボタンを押すと、右のように数式が表示されます。

|![スクリーンショット 2022-08-01 16.32.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2519173/2eba4e53-b590-0b26-9c20-75047f21d775.png)|![スクリーンショット 2022-08-01 1.17.04.p

元記事を表示

【Rails】importmap-railsの注意点

# 初めに

Rails7 では、`importmap-rails`が標準で利用できるようになりました。

`webpacker`や`jsbuilding-rails`などと違い、javascript モジュールをブラウザに直接インポートされます。

`importmap-rails`は他と違い注意しないといけない点があるので、忘備録として記事にしておきます。

# 注意点

## パッケージの追加の仕方

`importmap`は javascript パッケージを追加するためには、以下のようにします。

“`console
$ bin/importmap pin [パッケージ名]
Pinning [パッケージ名] to [パッケージURL]
“`

といった形で、パッケージを追加していきます。
`importmap`で利用できるのは npm から取得できるパッケージ JavaScript CDN 経由で利用できるものだけです。

## JSX は利用できない

`webpack`のようにコンパイルなどを行わなず、ブラウザに直接インポートされます。
なので、`JSX`のような明示

元記事を表示

郵便番号検索jquery.jpostal.jsの実装

# 概要
郵便番号から住所を検索し、結果をセットするjsの実装をしてみました。
今回使用したのは、”jquery.jpostal.js”

https://github.com/ninton/jquery.jpostal.js/#%E8%A8%AD%E7%BD%AE%E6%96%B9%E6%B3%95b

# 環境
* Rails7
* ActiveAdmin

# 導入方法
本家を参照のこと。

環境内で動作させたかったので、郵便番号データ(json)はプロジェクト内に配置しました。
* public配下にjson配置
`public/jpostal_json`

* assets配下でもOKでした(追記)
`assets/jpostal_json`

# コード

“`app/assets/javascripts/admin/active_admin.js
//= require jquery.jpostal.js
//= require admin/postalcode
“`

“`app/assets/javascripts/admin/postalcode.js
$(f

元記事を表示

DB設計を改修する~Model編~

# はじめに
Q&Aアプリを作成しています。DB設計で改修が必要になったので記事にしました。
今回はモデルの関連付けを解消します。

## 改修前のDB設計
![Qiita構想前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2485354/c54664f0-4379-4035-d530-95e76f5f6b9a.png)
![msg.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2485354/4527a299-5f52-72de-6827-095fe090a7fe.jpeg)

【解答】
質問(Question)に対して、最初に投稿(アソシエーション)されたCommentのオブジェクト
【コメント】
解答に対して、投稿(アソシエーション)されたCommentのオブジェクト

**ややこしい!**

## 改修後のDB設計(予定)
![Qiita構想後.png](https://qiita-image-store.s

元記事を表示

バリデーションエラーが日本語で表示されない。

# はじめに
本記事はプログラミング初心者が、「現場で使える RubyonRails5 速習実践ガイド」(通称)「現場Rails」で学習を進めていくにあたって、つまずいた点、バージョンの違いによるエラーが出た点などを解決した方法を備忘録も兼ねてまとめているものです。
そのため、記事の内容には誤りがある可能性があることをご理解ください。
誤りがあればお手数ですが、ご指摘いただければと思います。よろしくお願いします。

# 環境
Ruby 3.1.2
Rails 7.0.3.1

# エラーが表示されない
![スクリーンショット 2022-08-01 17.29.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737125/f4d06848-5596-44d2-2f70-448f534d8b53.png)

・名称を入力せずに登録しようとした時、赤枠のところに日本語でエラーメッセージが出てくるはずなのですが、出てきませんでした。(レイアウトが整っていないのは、ご了承ください?)
まず、そもそもエラー

元記事を表示

scopeの引数のブロック内にメソッドが定義されている場合の挙動

# はじめに

Railsのソースコードにて

“`ruby
class Shirt < ActiveRecord::Base scope :red, -> { where(color: ‘red’) } do
def dom_id
‘red_shirts’
end
end
end
“`

というコメントアウトを発見。

https://github.com/rails/rails/blob/main/activerecord/lib/active_record/scoping/named.rb#L117-L123

scopeの引数にブロックがあって、その中にメソッドが定義されている。初めて見る書き方だった。

調べてみても意外とどのような挙動をするのか書かれていないので、記事にしてみる。

# 第三引数のブロック内にメソッドを定義するとどうなるか

“`ruby
class Post < ApplicationRecord scope :ids_less_than_five, -> {where(‘id < ?', 5)} d

元記事を表示

Rails6 × Docker × MySQL × M1 Macでherokuデプロイ

現在、制作中のRailsアプリのHerokuデプロイに大苦戦しました。
何度もエラーに遭遇したのですが、その中の1つを記録として残しておきます。

環境

* M1 Mac
* Rails6
* MySQL バージョン5
* Docker

前提

本番環境DBはHeroku無料枠のMySQLを使用します。
HerokuでMySQLを使用する場合は無料枠でもクレジットカード登録が必要です。
詳しくは[こちら(Heroku公式)](https://devcenter.heroku.com/articles/cleardb)

Herokuデプロイに必要なファイル追加、DB追加、環境変数設定などは
[こちら](https://qiita.com/kenz-dev/items/8f95967601e587e14812)の記事を参考にさせて頂きました。

Herokuデプロイ

まず通常通りにコマンドを打っていきます。
dockerを使用しているのでContainer Registryにログインし、
imagesをpushする必要があります。

imagesをpushするの

元記事を表示

VSCodeの拡張機能を自動インストールするバッチファイル作ってみた for Mac

# 背景
いつも思うのですが、VSCodeの拡張機能で良いものって決まってませんか?
更に、その決まったものを何回もインストールするの時間の無駄じゃないですか?
(同じことの繰り返しは計算機の得意領域なのに!)
ということで、**Macでバッチファイル**作りましたぁ?
(Railsの拡張機能のみで、まだ勉強中ですがアウトプットします!)

Windows版&CLIアプリは↓です!

https://qiita.com/yuuki-h/items/cee80ab5134a22e341d8

# 内容
以下の2本立てです!
1. バッチファイルって何?
1. 普通のプログラムファイルとバッチファイルの違い
1. 作ってみた
1. 動作フロー

(Railsの拡張機能を対象に自動インストールするバッチファイルです!)

## 1. バッチファイルって何?
バッチファイルとは、Windowsで使える拡張子が「bat」のファイル(Macでは、「.command」の拡張子)のことで、**複数のコマンド(命令)やプログラム起動などを一つのファイルにまとめて記述し、一度に連続して実行

元記事を表示

OTHERカテゴリの最新記事