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

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

rails初心者のためのtips

rubyをこれから学ぶ人のために簡単なtipsを紹介していきます。

### まずはモデルから作る

開発ではまずモデルが一番最初に作られる。

モデルはただのクラスだが、データベースと連携するクラスをrailsではモデルという。

rails g modelコマンド

### 初期データを入れる

seedを使うか、rails consoleで入れる。

seeds.rbにデータを書いて、rails db:seed コマンド

### データの登録、更新、検索はどうする?

ActiverecordはSQLを触ることなくデータベースの操作ができる。

例えばrails cで

Book.allはselect * from books;と同じ

railsとDBはActiverecordとDBMSによって結び付けられている

allメソッドでデータをすべて取ってくる。

findメソッドでデータベースからデータを検索して取得する。

>id=2

>Book.find(id)

createメソッドでデータを登録する

Book.create(category:”家賃”,amount:

元記事を表示

Rails7 にてサーバ起動時に Helper を Zeitwerk で読めず uninitialized constant ~~Helper (NameError) で落ちる

謎のエラーではまって、また日本語で検索しても英語で検索しても同じ問題に困っている人が見つからず、また原因もわからず時間をつかってしまいました。釈然としないところはありますが、もしほかの方で発生した場合に参考になるよう、起きたことと自分の対処を記録しておきます。

## 環境

– Ruby 3.0.5
– Ruby on Rails 7.0.4
– zeitwerk 2.6.6

## 起きたこと

– サーバ起動時に ` uninitialized constant AccountConfirmationsHelper (NameError) ` が発生
– (起動時ログ全文は最下部に掲載)
– `load_defaults 7.0` でも `6.1` でも発生
– `Rails 6.1.7` では `load_defaults 6.1` でも問題なかった)
– `bin/rails zeitwerk:check` は問題ない
– エラーログで表示されている Helper は `rails generate controller` で自動生成された空の module

元記事を表示

ストロングパラメータ

# 1.ストロングパラメーターとは
– パラメーターを受け取る際に指定したキーをもつパラメータを受けとるように制限をかけるものです
– 制限がないと登録されるべきではない、カラムのデータが送られてきた場合に、そのデータが保存されてしまいます

# 2.基本の記述
“`:○○○_controller.rb
private
def message_params
params.require(:モデル名).permit(:保存させたいカラム名).merge(カラム名: 追加したいデータ値)
end
“`

### 2−1.require(:モデル名) メソッド
– モデル名の部分には、今回送られてきたデータはどこのテーブルに保存したいのかを記載します。

### 2−2.permit(:カラム名) メソッド
– カラム名の部分には、今回送られてきたデータはどのカラムに保存したいのかを記載します。
– `permit(:カラム名1, :カラム名2)`のように複数カラムを指定することも可能です。

### 2−3..merge(カラム名: 追加したいデータ値) メソッド

元記事を表示

Rails Sprockets::Rails::Helper::AssetNotFound の解決に色々頑張った話

# 始めに
仕事終わりにRails触るぞと思ってrails sをしてlocalhostにアクセスしようとしたらタイトルの通りトラブったので備忘録です。記事を調べた時にどれもこれも本番環境の話をしていたのでここでdevelop環境でエラーが起きた時の解消法を記事にしました。

# 起きた現象
画面のスクショを取り損ねたのでコピペ文章を貼ります。
“`エラー:エラー
Rails Sprockets::Rails::Helper::AssetNotFound in Stations#index

The assets “application.css” is not found in the assets pipeline.
“`
昨日は特に問題なく起動できたのになぜなんだ……application.cssなんて全く弄っていないが? ということで色々調べてみたのですが、どうもアセットパイプライン周りのエラーっぽいことがわかりました。ということで行った対処がこちら。
“`ターミナル
$ bundle exec rake assets:clean
$ bundle exec rake as

元記事を表示

Rubyで本気で考えるnil safe

※ 本記事の内容は[作者のブログ](https://www.fumi-blog.link/articles/hz3ekqyxyyiv)にも書いているのでこちらも応援お願いします?‍♂️

## はじめに
以下のようなclassを考えます

“` ruby
class Person
attr_accessor :first_name, :last_name
def full_name
last_name + first_name
end
end
“`

このクラスは、苗字と名前を与えると、full_name関数でそれを合わせた形で取り出すことができます

“` ruby
person = Person.new
person.last_name = ‘山田’
person.first_name = ‘太郎’
puts person.full_name # 山田太郎
“`

では、以下の場合はどうでしょうか

“` ruby
person = Person.new
puts person.full_name
“`

実行すると以下のようなエラーが

元記事を表示

jquery.jpostal.jsで自動入力が反映されない

# はじめに

jquery.jpostal.jsで自動入力された先がselect2だった場合、値が反映されなかった
(selectタグだと正常に自動入力された)

# 解決方法
triggerオプションを追加することで自動入力された値の変更を検知できるようになる

“`
trigger : {
‘#address1_kana’ : true,
‘#address2_kana’ : true,
‘#address3_kana’ : false
}
“`

# 参考文献
[「jquery.jpostal.js」で自動入力された値に反応して特定要素のテキスト変更とクラスの付与をしたい](https://teratail.com/questions/215786)

元記事を表示

自作RailsアプリをNuxt.js3 でSPA化してみた

# はじめに?

自作Railsアプリ(習作)を バックエンド(Rails)、
フロントエンド(Nuxt.js3)、で、SPA化してみました。

## Nuxtフロントエンド

https://github.com/asip/easel-front

Vue3 のAPIは Composition API を全面採用しています。

RailsフロントエンドのView分割をそのままコンポーネント化。

## Railsバックエンド

https://github.com/asip/easel

Rails7.0 + MySQLです。
RailsフロントエンドではHotwire(Stimulus + Turbo)を採用。
ログインまわりは、sorcery + sorcery-jwt。

## 最後に

Nuxt.js3いいよ、Nuxt.js3!

上記アプリのSPA化に掛かった期間はちょろちょろ作成で数週間。
(初めての Nuxt.js3 アプリ作成、Nuxt.jsを触るのも初めて。)

React / Next.js / Remix で 数週間で 同アプリをSPA化する
のは、自分には

元記事を表示

ActiveSupport::Duration で経過した月数を計算する

“`pry
[1] pry(main)> now = Time.current
=> Thu, 26 Jan 2023 19:07:20 JST +09:00

[2] pry(main)> past = Time.current.ago(6.months)
=> Tue, 26 Jul 2022 19:07:22 JST +09:00

[3] pry(main)> ActiveSupport::Duration.build(now – past).parts
=> {:months=>6, :days=>1, :hours=>9, :minutes=>5, :seconds=>22.157833217}

[4] pry(main)> ActiveSupport::Duration.build(now – past).parts.dig(:months)
=> 6
“`

元記事を表示

AWS ECS上でRails上で動作するバッチをスケジューリングする

whenever+cronを使ってRails上のバッチを定期的に処理を行なっていたのだけど、
マネージドな環境に移したくなった。

# 手順
## railsをdockerに詰める
普通にsrc詰めて、bundle installする

## cmd
cmdにrails runnner Hoge::moge を設定する

## ECRへpushする

## ECSタスク定義を設定する
↑のECRを設定する
Fargateを指定する
ポートは指定しなくて良い

### テスト実行
cli run-taskコマンドで試してみる。
“`
aws ecs run-task –launch-type FARGATE \
–cluster #{cluster-arn} \
–task-definition #{task define arn} \
–network-configuration #{vpc config}
“`

## ECSタスクスケジュールへ登録
ECSクラスター => タスクスケジュールへタスク定義を登録する
実行間隔をcronとかで設定可能

元記事を表示

【初学者向け】DockerでRails7の環境構築(2023年版)

[Dockerの公式ドキュメント](https://docs.docker.jp/compose/rails.html)でRails7系の環境構築をしたら途中で詰まったので、スムーズに構築していく方法を記します✏️

## 前提条件
開発環境
– M1Mac: Ventura13.0
– [Docker Desktop](https://docs.docker.com/desktop/install/mac-install/)インストール済み

## この記事でわかること

✅[Dockerの公式ドキュメント](https://docs.docker.jp/compose/rails.html)に沿ったRails7系の環境構築方法✅
(公式ドキュメント通りに行うとエラーが発生するので、本記事ではその解決方法も記します!)
※ 本記事では、DockerでRails7を最速で環境構築する方法を記します。DockerやRailsの詳しい説明については別記事をご参照ください?

## 環境構築手順

### 1. 任意のディレクトリを作成
Macの任意

元記事を表示

MYSQL

# mysqlの起動
“`
$ mysql -u root -p
“`

# データベースの確認
“`
mysql> SHOW DATABASES;
“`

# データベース接続
“`
mysql> use 接続したいデータベース名;
“`

# テーブル確認
“`
mysql > show tables;
“`

# テーブルのデータを確認
“`
mysql> SELECT * FROM 確認したいテーブル名;
“`

MYSQLを抜ける
“`
mysql> quit
“`

元記事を表示

うまく使えばレスポンスが爆速に Rails 7から導入されたload_asyncについて解説

今回はRails 7から導入された新機能 load_asyncについて解説します!

[私のブログ](https://ftb3nip05e.microcms.io/apis/blogs/dnjqj82-63)にも同じ内容を記載しておりますので、こちらも是非ご参照ください

## load_asyncとは
Rails 7から追加された、「非同期的にクエリ実行するためのメソッド」です。

並列にクエリが実行されるため、うまく使うと **これまで時間がかかっていた処理をかなり短縮できる「可能性」** があります。

## load_asyncの使い方
以下のような場面を想像してみましょう。

mypageを取得するメソッドの中で、「お客様のプロフィール」「お客様の購入履歴」「お客様の獲得ポイント」の3つを取得しています。

“` ruby
def mypage
@profile = Profile.find_by(user_id: params[:user_id])
@orders = Order.where(user_id: params[:user_id])
@poin

元記事を表示

単価に見合ったRubyエンジニアを雇うために面談で使える技術的な質問

### 解決したいこと
単価に合わないRubyエンジニアを雇いたくはない。

### 解決方法
面談で技術的な質問で単価に合わないエンジニアか判断できるようにする

### 技術的な質問集
railsエンジニアの面談時の技術的な質問をまとめました↓

Q: Userモデルが複数のpostを持つ時、userモデルにどのような記述をしますか?
A: has_many :posts

Q: Userモデルが複数のPostを持つ時、Postモデルにどのような記述をしますか?
A: belongs_to: user

Q: Userモデルが複数のPostを持つ時、userのレコードが削除された時にpostsも削除されるようにするためにどのような記述が必要ですか?
A: has_many :posts, dependent: destroy
has_manyの記述の後にdependent: destroyをつける

Q: railsで、データベースの構成を変更するために何をしますか?
A: マイグレーションファイルを作成する

Q: マイグレーションファイルを作成するコマンドは?
A: ra

元記事を表示

変更した差分だけ、rubocopでコードチェックする方法

gitとrubocopをプロジェクトに入れている時のみ使えます。

コード整形はしない場合
“`shell
git diff –diff-filter=ACMR –name-only | xargs bundle exec rubocop
“`

コード整形までさせる場合
“`shell
git diff –diff-filter=ACMR –name-only | xargs bundle exec rubocop -a
“`

# rubocop

https://github.com/rubocop/rubocop

元記事を表示

Rails ajax 処理の場合 ApplicationController に書いてある 共通処理 を スキップ したい

# 何がしたい?
全ページ共通で行いたい処理って、ApplicationControllerのbefore_actionに書いたりするじゃないですか?
例えば、今みんなの右上にあるQiitaの通知なんかもおそらくApplicationControllerのbefore_actionで件数やコンテンツをセットしているのではないかな。(これは妄想なので真相は知らんけどね)

ApplicationControllerのbefore_actionって何も特別な記述をしていない場合、
Controllerに入る前に確実に通ってしまうのですが、そうなるとajaxなどの処理時にも通ることになるやん?
そうなると割と重い処理をbefore_actionに書いている場合ちょっとしたajax処理でも激オモになってしまうんですわ:poop:

元記事を表示

【rails】日付でのDB検索を行いたい

例)
start_atカラムで開始時間を管理している。
指定した日付に該当するデータを確認したい。

~~~:railsコンソール
search_date = ‘2021-06-15’
ExamSchedule.where(start_at: search_date.in_time_zone.all_day)
~~~

参考記事
https://tech.pla-cole.co/rails-db-action/

元記事を表示

Ruby on Rails初心者の学習記録 Part4:CRUD(後編)

# はじめに
Ruby on Rails初心者の学習記録Part4です。
[Part1](https://qiita.com/Yasushi-Mo/items/d24fd4abab2c1333c522)では、Rubyの基本文法やRailsを利用したWebアプリケーションの開発環境構築手順及びルーティングについて学びました。
[Part2](https://qiita.com/Yasushi-Mo/items/5dfe81d39b5a153fe43c)では、MVCアーキテクチャのモデルについて学びました。
[Part3](https://qiita.com/Yasushi-Mo/items/931cfcef990647f1da18)とPart4では、 [“Getting Started with Rails”](https://guides.rubyonrails.org/getting_started.html) の [“7 CRUDit Where CRUDit Is Due”](https://guides.rubyonrails.org/getting_started.html#

元記事を表示

rails 学習備忘録その2 ~道場レッスンIIまで~

# はじめに
マジでただのメモ 読んでもらうために書いてないので悪しからず…
第一回↓
https://qiita.com/menma_at_here/items/fe207f4a4241c11d504e

# 内容
progate の rails入門を進めていく
4章~5章まで

## rails IV

### 編集
– updateとかcreateするときは、ルーティングを `get` ではなく `post` にする必要がある
– `post “posts/:id/update” => “@posts#update”` みたいな感じでupdateアクションに飛ばして、その中で `redirect_to(“~~”)` をする、みたいな流れ
– form を使うときは、以下みたいな感じで `form_tag` を使う
“`erb
<%= form_tag("/posts/#{@post.id}/update") do %>

OTHERカテゴリの最新記事