- 1. Slack::Notifierをrspecでmockする
- 2. [Rails7]kaminariでページネーションするときにundefined method `page’ for #
- 3. [Rails]実務のコードは膨大すぎて大変だった。全体のコードの把握するためのコツとは。
- 4. [Ruby&VSCode]のメソッドジャンプの設定方法
- 5. RailsでMySQLの全文検索をいい感じに書きたい
- 6. webエンジニアを目指して
- 7. 【Rails】診断機能を実装(徹底解説)
- 8. パスワードの表示/非表示を切り替える
- 9. rails初心者のためのtips
- 10. Rails7 にてサーバ起動時に Helper を Zeitwerk で読めず uninitialized constant ~~Helper (NameError) で落ちる
- 11. ストロングパラメータ
- 12. Rails Sprockets::Rails::Helper::AssetNotFound の解決に色々頑張った話
- 13. Rubyで本気で考えるnil safe
- 14. jquery.jpostal.jsで自動入力が反映されない
- 15. 自作RailsアプリをNuxt.js3 でSPA化してみた
- 16. ActiveSupport::Duration で経過した月数を計算する
- 17. AWS ECS上でRails上で動作するバッチをスケジューリングする
- 18. 【初学者向け】DockerでRails7の環境構築(2023年版)
- 19. MYSQL
- 20. うまく使えばレスポンスが爆速に Rails 7から導入されたload_asyncについて解説
Slack::Notifierをrspecでmockする
SlackNotifierのmock方法の記事が見つからなったため書いてみました。
“`rb
let(:slack_mock) { double(‘slack’) }subject { #処理を定義 }
# pingレシーバーを定義
before(:each) do
allow(Slack::Notifier).to receive(:new).and_return(slack_mock)
allow(slack_mock).to receive(:ping)
endit ‘Slack通知が実行されない’ do
expect(slack_mock).to receive(:ping).never
subject
endit ‘Slack通知が1回呼び出される’ do
expect(slack_mock).to receive(:ping).once
subject
end# メッセージまで検証したい場合は下記の通り
it ‘Slack通知に想定メッセージが渡され実行される’ do
expect_message = “test”
[Rails7]kaminariでページネーションするときにundefined method `page’ for #
https://qiita.com/mmaumtjgj/items/771deb2f3da3eecb4f54
こちらの記事を参考にpagenate機能を実装しようとしていたところ、undefined method `page’ for #
[Rails]実務のコードは膨大すぎて大変だった。全体のコードの把握するためのコツとは。
## 実務のコードは膨大すぎて大変だった!
Railsで下記のサービスを作ったことはありますが、やはり、実務としてのコードは膨大すぎて、初めて実務に入った時は大変な思いをしました。https://qiita.com/parkon_hhs/items/98304bc5112f0e0f6faf
私だけがわからなかったことかもしれませんが、膨大なコードを把握するために知っておくといい項目をいくつかまとめてみようかと思います。
## 環境
– Rails
– VSCode
– macOS## Railsのコードの動きの把握
最初にRailsのコードの把握するコツを紹介します。
#### どこにも定義されてないメソッドについて
例えば`post_controller.rb`に定義されてないのに使われているメソッドがありますね。
それは主に`modelで定義されたメソッド`か`gem専用のメソッド`の可能性が高いです。まずは`post_controller.rb`なので、`model/post.rb`を調べてみましょう。モデルメソッドがコントローラーで使われているかもしれません
[Ruby&VSCode]のメソッドジャンプの設定方法
## はじめに
Javascript&VSCodeでのお馴染みの`Go to definition`(`F12`キー)機能ですが、Rubyではデフォルトではない機能ですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2350392/372a17e4-a88a-f7cd-6cbf-87d9815ddf15.png)初めて実務でRailsのコードを読んだ時、メソッドを一つ一つ検索するのが面倒で、調べたら設定方法がありました。
現在はうまく活用できて作業効率アップにつながった機能ですね。それでは、ご紹介したいと思います。
## 設定方法
1. VSCodeの拡張機能(Extensions)アイコンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2350392/8d1dcf41-dbe2-6dee-6fd5-d3539e509940.png)
2. `Ruby by Pe
RailsでMySQLの全文検索をいい感じに書きたい
バージョン Rails7.0, MySQL8.0
(AND -(OR) + OR -(OR)) みたいなことをやりたいなと思って、色々こねくり回したらこんなコードができました。
直接ANDとORをかけると途端に遅くなってしまう(MySQLが一度に使えるインデックスのなんかの制約に引っかかっているぽい? 要調査)ので、サブクエリを使って一度全体を引いた後に、ANDがあれば絞り込むみたいな挙動にしてみました。
モデルに直接書いたけどconcernぽくもできそう。
“`ruby
class Item < ApplicationRecord SUB_T = 'sub' class << self # 前提: search_target_column には検索対象となる文字列が入っていて、fulltext indexが貼られている # 作りたいSQL # select # T1.* # from # ( # select # * # from #
webエンジニアを目指して
現在、SES(客先常駐)企業でフロントエンドエンジニアをしているbachikoriです。
今日からwebエンジニアへの就職を目指して頑張ったことや気づいたことを投稿できたらと思います。
初めの投稿となりますので自己紹介や現在のスキル、転職しようと思ったきっかけなどを綴りたいと思います。# 自己紹介
現在、22新卒でSESの企業に所属しています。
大学は文系科目で情報系の学部に入りましたが、当時はプログラミングにあまり興味が持てませんでした。大学3年生後半に友達と受けたプログラミングの授業をきっかけにJavaScriptを勉強しはじめ、大阪から上京してきました。# 現在のスキル
– HTML/CSS
– JavaScript
– React(useState, useEffect, react-router-domが使える程度)
– ruby on rails(progateの課題を全て完了した程度)これからこちらの[gitihub](https://github.com/bachikori)に新しく学んだことを共有していきます。
# 転職しようと思ったきっかけ
現在行っ
【Rails】診断機能を実装(徹底解説)
今回は診断機能を実装していこうと思います
[こちらの記事](https://x.gd/bFoP4)を応用したものになりますので、必要があればご参照ください。# 目次
① 診断機能の実装イメージ
② 実装の下準備(診断内容の考察)
③ モデル・テーブルの作成
④ 診断するページを作成する
⑤ コントローラーを記述する
⑥ 診断結果を表示するページを作成する
おまけ① 診断結果を保存したい場合※すぐに実装を始めたたいという人は、①・②をとばし、「③ モデル・テーブルの作成」から始めてください
###### 実装環境
ruby 3.0.4p191 (2021-07-07 revision a21a3b7d23) [x64-mingw32]
Rails 6.1.5## ① 診断機能の実装イメージ
診断機能とはどういうものか、イメージを明確にしておきます
① 以下のサイトで実際に診断機能を動かしてみましょう
② 診断機能のプログラムの構造を図解します
まずは以下の写真を見てください
![image.png](https://qiita-image-store.s3
パスワードの表示/非表示を切り替える
## 環境
– Rails5.2
– Slim
– JavaScript## はじめに
パスワードを入力をする際、セキュリティのため、入力した文字が「・・・」で表示されます。それを、チェックボックスを使って、入力文字が表示できるよう、切り替えられるようにします。どのようにするのかといえば、HTMLの**input**タグの**typ**e属性を、**password**から**text**に変更するだけです。これだけで、入力文字が表示されるようになります。非表示にしたい場合は、input属性を逆に、textからpasswordに戻せばいいだけの話です。フロントエンド側の操作になるため、JavaScriptを使って実現させることになります。## 動き
チェックを外すと、パスワードが非表示になります。
![無題1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94029/d1806192-15dd-d713-ff70-38434251dd3c.png)チェックをつけると、パスワードが表示されます
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: 7)
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#indexThe 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