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

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

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の拡張機能のみで、まだ勉強中ですがアウトプットします!)

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

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

## 1. バッチファイルって何?
バッチファイルとは、Windowsで使える拡張子が「bat」のファイル(Macでは、「.command」の拡張子)のことで、**複数のコマンド(命令)やプログラム起動などを一つのファイルにまとめて記述し、一度に連続して実行できるようにしたもの**のことです。たくさんのコマンドを1回の実行で済ませるなんて便利ですね!
でも、こう思った方いませんか?
**「別にターミナルで実

元記事を表示

最近思うrspecをシンプルにする書き方(オレ流)

# rspec書き方指南ではない

最近自分でやってみて、テストが意外に楽に書けるのではないかと思うやり方をまとめてみた。
ベストだとか唯一の書き方だとかそういう事を言いたいわけではない。各自自分の好きなやり方で書けばいいと思う。最終的には自分の書いたクラスがちゃんとテスト出来ていれば目的は達成している。

個人的な主観としてテストは出来るだけシンプルにしたい。そうじゃないと個人的にテストを書くのが嫌になるし、テストが間違ってて、そもそも何をテストしてるのか?という事になりたくない。
と言うことを解決できるのではないかという投稿。

### 要点

– クラス内のメソッド(処理)は出来るだけシンプルにしたい
– 一度しか呼ばれないようなロジックでもメソッドに落とし込みたい
– メソッドが増える分、内部のメソッドと外部向けのメソッドをちゃんと意識する
– itに説明は要らない
– テスト中に使用する変数内容は実際の条件を意識しない
– `subject`と`allow`をよく使う
– `expect(…).to have_received(…)`をよく使う
– `expect{.

元記事を表示

【Ruby on Rails】rails-latexを利用してPDFを作成

# はじめに
Ruby on Railsで個人開発をした際に、gem [rails-latex](https://github.com/amagical-net/rails-latex)を使って、ユーザーが入力したTeXコードをコンパイルしてPDFを作成する機能を実装しました。
関連する記事があまりなかったので、どのようにしたのかを残そうと思います。

# 設定
PDF作成には `LatexToPdf.generate_pdf(code, config)`メソッド([rubydoc](https://www.rubydoc.info/gems/rails-latex/2.3.0/LatexToPdf.generate_pdf))を利用するので、gemをインストール後、その設定を行います。初期設定は以下の通りです。
(注)「・・・」の部分は、`Users/・・・/(appのルートディレクトリ)`が入ります。

“`
LatexToPdf.config
=>
{:recipe=>[],
:command=>”pdflatex”,
:arguments=>[“-ha

元記事を表示

私の新人研修はこんな感じでした。

プログラミング未経験の新卒2人が、開発期間4週間で
「社員間で本を貸し借りできるアプリ」を作成しました!
image.png
このアプリは、社内の課題を解決するアプリを作成するという新人研修の成果なのですが、この開発の道中には多くの学びがありました。

ここでは、この新人研修がどのように進んだのか、そして各段階で私が何を考えていたのかを書いていこうと思います。

# 目次
[1.研修の概要](##1-研修の概要)
[2.研修前の準備](##2-研修前の準備)
[3.テーマ決め](##3-テーマ決め)
[3.UI・UX設計](##3-UI・UX設計)
[4.計画立て](##4-計画立て)
[5.実装](##5-実装)
[6.リファクタリング](##6-リファクタリング)
[7.おわりに](##5-おわりに)

##

元記事を表示

rails モデルとは何か 初心者向け

# 始めに
現在プログラミング初学者でポートフォリオ作成中です。Modelの理解が曖昧なため自分の様な初心者にもわかりやすいようにまとめてみた。

## まずは頑張って公式資料を見てみる

初学者にとって、本当に公式資料は読みにくい。流し読みではまず内容が理解することはできないだろうし、よく読んだとしても独特な言い回しと、見慣れない言葉で説明を受け頭の中はショート寸前となる。そのため、単語ひとつずつ丁寧に噛み砕いていこうと思う(私のために)。

[Ruby on Rails公式ページ](https://railsguides.jp/active_record_basics.html
)

# モデルの説明の前に、、、
### `Active Record`とは、、、
`Active Record`とは
`Active Record`は簡単にデータベースとのやり取りを実現するための道具である。
私たちがよく作るモデル、例えばこれとか(Postモデル)
“`rb:Postmodel
class Post < ApplicationRecord end ``` よくみると`Post`は`A

元記事を表示

【ActiveRecord】JOIN したテーブルに条件を指定するときは merge を使おう【Tips】

例として次のようなクラスがあると想定します。

“`ruby
class User < ApplicationRecord has_many :comments end class Article < ApplicationRecord belongs_to :user has_many :comments end class Comment < ApplicationRecord belongs_to :user belongs_to :article end ``` `item_type` が `"Article"` の `Comment` を持つユーザーを取得したい場合、 `joins` と `where` を使うと以下のようになります。 ```ruby User.joins(:comments).where(comments: { item_type: "Article" }) ``` これを `merge` を使って書き換えると次のようになります。 ```ruby User.joins(:comments).merge(Comment.wh

元記事を表示

devise_token_authを用いたユーザ登録時の「Unpermitted parameter: :registration」の対処

# はじめに
vue.js + Ruby on Rails(apiモード)でユーザ登録機能を作成中に、以下のエラーが発生。
“`ruby
Processing by DeviseTokenAuth::RegistrationsController#create as HTML
Parameters: {“name”=>”dd”, “email”=>”dd@dd.com”, “password”=>”[FILTERED]”, “password_confirmation”=>”[FILTERED]”, “registration”=>{“name”=>”dd”, “email”=>”dd@dd.com”, “password”=>”[FILTERED]”, “password_confirmation”=>”[FILTERED]”}}
Unpermitted parameter: :registration
Unpermitted parameter: :registration
Unpermitted parameter: :registration
“`

ユーザ登録時には、

元記事を表示

【Ruby on Rails】ransackの関連を調べる方法

## やり方
rails consoleを開く。
“`ruby
[8] pry(main)> Gorira.ransackable_associations
=> [“corporation”, “user”, “articles”, “schools”, “shool_goriras”]
“`
こんな感じで“.ransackable_association“というものを使用すると関連を確かめることができる。

元記事を表示

Rails及びDocker環境でのpry-railsのデバッグ方法

## なぜ記事を書こうと思ったか
Rails及びDocker環境でpry-railsでのデバッグをおこなったので、そのやり方を記載致します。
これまで、行っていたデバッグよりもより細かくコードを確認でき、すごく便利に感じたので、多くの方が使ってくれると嬉しいです。

## Rails及びDocker環境でpry-railsでのデバッグ手順
**※Dockerは構築して、起動してある事を前提として記載致します。**
### デバッグ手順
1.Railsのコードで動作を止めて、確認したいコードの直後に`binding.pry`を追加します。
今回は例として、createメソッドのコードに付け足したいと思います。
“`
def create
permit_parameters = params.permit(:name, :age, :sex).to_h
binding.pry

user = User.create!(
name: permit_parameters[:name].to_i,
age: permit_para

元記事を表示

【Ruby on Rails】検索結果のレコードを並び替える

# はじめに
レコードの検索・並び替え、それぞれを単独に行うのであれば容易にできますが、**検索結果のレコードを並び替える**となると、検索結果をどのように次のリクエストに引き継ぐのかが問題になります。個人開発で検索・並び替え機能を実装した際にこの点に悩んだので、誰かのお役に立てればというのと、自分の実装に問題があればご指摘いただけると嬉しいなということで、自分がどのように解決したかを残したいと思います:bow_tone1:

# 前提
## どのように問題を解決するのか
HTTPはステートレスなプロトコルなため、複数のリクエスト間で状態を保持するためには何らかの方策が必要です。代表的なものにセッションとDBの利用がありますが、
– セッションを利用すると、ユーザーがアプリケーションから離脱した時なども検索条件が残り、次回検索・並び替えのときに条件が引き継がれるなど、個人的に気持ち悪い。
– 検索条件のような一時的なものをDBに保存するのは違和感がある。

じゃあどうするか。

小森裕介(2010)『プロになるためのWeb技術入門』講談社の 「3.4 Webサーバーへの要求をどのように

元記事を表示

OTHERカテゴリの最新記事