Rails関連のことを調べてみた2021年06月23日

Rails関連のことを調べてみた2021年06月23日

今更だけどdeviseのPrefixについて整理してみた

# はじめに
deviseで自動作成されるルーティングである「sessions」「password」「registrations」に関する備忘録です。
Prefixによる処理の記述はよく行いますが、「Prefixを見ただけでどんな処理が実行されるか?」をパッとイメージできなかったので整理しました。
ミスがあれば、コメントで教えてください。

# 開発環境
– Ruby 2.7.2
– Rails 6.1.3
– PostgreSQL 13.2

# 事前準備
まずはログイン機能をもつサンプルアプリを下記コマンドで作成します。
DBはPostgreSQL、テストファイルは不要なので-Tを付けます。

“`ruby
rails new sample -d postgresql -T
“`
`gem ‘devise’`の記述をGemfileに追加し、`bundle install`をします。

次に、下記コマンドを実行し、ログイン機能に対応したUserモデルを作成します。

“`ruby
rails g devise:install
rails g devise User
rails

元記事を表示

ransackで入力した値が、営業時間内か検索する。

#はじめに
現在デートスポットのレビューサイトを作成中です。
検索した時間が、営業時間内に入っていれば表示する検索機能を実装しようとしたら、なかなか実装できませんでした。
その実装方法を記事にしてみようと思います。

#modelの概要
“`
create_table “date_spots”, charset: “utf8mb4”, collation: “utf8mb4_0900_ai_ci”, force: :cascade do |t|
t.integer “genre_id”
t.string “name”
t.datetime “opening_time”
t.datetime “closing_time”
t.datetime “created_at”, precision: 6, null: false
t.datetime “updated_at”, precision: 6, null: false
end
“`
始業時間(opening_time)と終業時間(closing_time)がデートスポットごとに決

元記事を表示

ド忘れしていたRubyの基礎5選④

どうも、三町哲平です。

https://qiita.com/TeppeiMimachi/items/a0a449a1d2f0897fa6e2

ド忘れしていたRubyの基礎5選の第4弾です。

今回は、コチラの問題を解く際を想定
[Reverse Integer – LeetCode](https://leetcode.com/problems/reverse-integer/)

解き方は、コチラを参照
[Ruby Solution – LeetCode Discuss](https://leetcode.com/problems/reverse-integer/discuss/337885/Ruby-Solution)

# 1. 後置if

“`ruby
# 普通のif文
if foo
bar
end

# 後置ifを使ったif文
bar if foo
“`
可読性の観点からも後置ifの多様には注意が必要です。

引用及び参考記事:[【Ruby】乱用厳禁!?後置ifで書くとかえって読みづらくなるケース – Qiita](https://qiita.com/jnchito

元記事を表示

Railsのcallbackでハマったこと

* 一時的にcallbackを外したい時に、全部で3つのcallbackがあったとしてA,Bだけskip_callbackでcallbackを外して、Cだけ残し、あとから、A, Bをset_callbackで復活させた場合、 以前はA, B, Cの順で呼ばれてたのに、C, A, B に変わってしまう。以下のようにしないといけない。
* skip A
* skip B
* なにか処理
* skip C
* set C
* set B
* set A
* callbackの中でself.reloadを実行すると、後続のcallbackでは、xxxx_was などのdirty attributesが取れなくなってしまう

元記事を表示

マークダウン形式への変換に便利!「reverse_markdown」

## 参考
Github
[reverse_markdown](https://github.com/xijo/reverse_markdown)

× マークダウン形式を変換ではなく
○ マークダウン形式に変換したい
そんな時に便利なgemでした。

## 実装経緯

– ウィジウィグ使用して保存されているHTML形式データを取り出してマークダウン形式に変換
– それをCSV出力

(※今回ウィジウィグ・CSV出力については割愛させていただきます。)

上記を行う事があったため
**reverse_markdown(gem)**
を使用して実装してみた。ありがたや…
忘れないようにメモ。

## 結論
テスト的に下記のようなHTML文を変換すると…

“`html

項目タイトル

test

【画像出典元】

 

元記事を表示

[Ruby] Arrayメソッドで使うfirstとlastとそれ以外について

Rubyには配列メソッドとして`first`と`last`というものが存在します。

“`
[0,1,2].first
=> 0

[0,1,2].last
=> 1
“`

それぞれ配列の要素の最初と最後を取得するメソッドです。
それ以外のやり方として`second`,`third`,`fourth`,`fifth`があります。
使い方は以下のようになります

“`
[1,2,3,4,5].second
=> 2

[1,2,3,4,5].third
=> 3

[1,2,3,4,5].fourth
=> 4

[1,2,3,4,5].fifth
=> 5
“`
それぞれ配列の2,3,4,5番目から要素を取得します。

元記事を表示

【第1回】RailsのN+1問題と解決するためのメソッド完全版

この記事では、N+1問題の正しい理解と、解決するためのメソッドを紹介します。
第1回では、N+1問題とはなにか、そしてどのような状態で発生するのかを具体例とともに解説します。
この記事を読むことで、N+1問題の正しい理解、ケースに応じたN+1問題を解決するメソッドの使い分けができるようになるはずです。

##本記事の内容
* N+1問題とは
* N+1問題が発生する状況
* SQLが発行されるタイミング

##開発環境
* Ruby 2.7.2
* rails 6.1.0

##アソシエーション
![スクリーンショット 2021-06-22 22.36.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642155/f4609885-52cf-59ef-fdba-a37e001d40d0.png)
“users“テーブルと“posts“テーブルが1対多の関係でアソシエーションされています。
ユーザー1人に対して、投稿を複数持っている基本的な構成です。

それではさっそくいきましょう。

##N

元記事を表示

AWS FargateにRailsアプリケーションをGithubActionsで自動デプロイする

前回の記事で、RailsアプリケーションをFargateで動かすところまで解説しました。

https://qiita.com/hatsu/items/22e11e94a0a981d78efa

本記事では、GithubActionsを利用してMasterにマージされたら自動で新しいバージョンがFargateにBlue/Greenデプロイされるようにしていきます。

## GithubActionsの作成

### .gitignoreの編集

pumaを起動する際に、puma.sockファイルが設置されるtmp/socketsフォルダをGithubにもあげたいので、
tmp/sockets/フォルダに`.keep`ファイルを作ります。

“`bash
touch tmp/sockets/.keep
“`

ファイルを作ったら.gitignoreに以下を追加して、tmp/socketsフォルダをgit commit出来るようにします。

“`
!/tmp/sockets
“`

### .github/workflows/deploy.yml の作成

https://git

元記事を表示

ド忘れしていたRubyの基礎5選③

どうも、三町哲平です。

https://qiita.com/TeppeiMimachi/items/f3a9047dffdbc119df27

ド忘れしていたRubyの基礎5選の第3弾です。

今回は、コチラの問題を解く際を想定
[(4) Palindrome Number – LeetCode](https://leetcode.com/problems/palindrome-number/submissions/)

解き方は、コチラを参照
[(4) 5 line Ruby Solution > 99% of Ruby Solutions – LeetCode Discuss](https://leetcode.com/problems/palindrome-number/discuss/267430/5-line-Ruby-Solution-greater-99-of-Ruby-Solutions)

# 1. reverseメソッド
reverseメソッドとは配列の要素の順番を反転させるメソッドです。

“`ruby
trains = [“赤色”, “白色”, “青色”,

元記事を表示

AWSにデプロイ後ブラウザに反映されない問題(コンパイル関連のエラー)

エラー内容

デプロイ環境をherokuからAWSに移行して、ブラウザで確認したところ表示されないエラーが起こりました。そこでssh接続して、クローンしたオリアプのディレクトリにてエラーログを確認すると以下のエラー文がありました。

“`terminal
ActionView::Template::Error (Webpacker can’t find application in /var/www/projects/motivate/public/packs/manifest.json. Possible causes:
“`

原因

自分はrailsのバージョン6を使用していたのですが、参考にした記事はrailsのバージョン5を使っており、その差異によってエラーが起こりました。具体的にはyarnとwebpackerが入っていないためコンパイルができないというものです。

解決策

原因にも書いた通りyarnとwebpackerが入っていないのが原因なので二つをインストールすればいいのですが適切なバー

元記事を表示

ワード検索機能の実装

自分で作成したアプリにワード検索機能を実装したいと思います。

## ルーティングの設定

“`config/routes.rb
Rails.application.routes.draw do
root to: “home#index”
resources :archive do
collection do
get ‘search’
end
end
end
“`
今回はarchiveに検索機能をつけるので、collectionで指定しました。
ちなみにcollectionの他にmemberで指定する方法もありますが、違いは検索した対象のレコードのidを取得するかどうか。

使い所で説明した方が良いと思います。

collection
検索結果を一覧表示する→indexならこっち

member
検索した結果の特定のページに遷移する→showならこっち

## modelの追記

“`app/models/archive.rb
class Archive < ApplicationRecord has_many :tag_relatio

元記事を表示

AcctveRecord::Relationを利用してSQL発行回数を抑える方法

## AcctveRecord::Relationとは?
ActiveRecord::Relationではデータベースへの問い合わせ結果ではなく、**あくまで「どのようなSQLが発行されるか」という情報が保持されているに過ぎず、実際にSQLの実行結果が必要になるまではデータベースへのアクセスは実行されません。**
これを利用することでデータベースとの通信回数を抑えることが可能になります。

なお今回の内容には関係ありませんが、メソッドチェインを使用するためにもこの設計は必要不可欠です。
なぜならメソッドを呼び出した途端にSQLが実行されてしまう場合、まとめて全ての条件をメソッドに渡す必要があるためです。

## SQLの発行回数を抑える実例
![user_product_like.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1053396/0c992fa7-6f3b-db7e-d0db-8baef2df2516.png)

このようなモデルを例にします。
idが1のユーザーのお気に入り商品を取り出す場

元記事を表示

【個人開発】バイト先のシフトアプリを作ったお話

# はじめに

こんにちは。Web開発が好きな情報系の学部4年生です。
3年生の夏〜秋にバイト先のシフトを管理できるWebアプリを開発して、4年生の6月くらいまで運用していたので、その経験を振り返りたいなぁと思い記事にしてみました。

よかったら最後まで見てやってください:turtle:

# 背景

僕のバイト先は個人経営の小さな焼肉店でした。
忙し過ぎず、従業員もみんな優しくて、それでいてまかないまで頂けたので、とてもいい環境で働かせてもらってました。

ただ、シフト提出は少し面倒だったんですよね。
1枚のシフト表に全員分の名前と1ヶ月分の日にちがプリントされていて、手書きで全ての日にちを埋めていく…といった感じでした。
スケジュールの都合が合わなければ、シフト入ってない日にわざわざ店に出向いて記入しにいくこともしばしば、、、
コロナが本格化して休業する機会が増えてきたときはスマホのメッセージでシフトを提出するようになりましたが、カレンダーアプリと見比べながら一つ一つ日にちと時間を入力して…っていうのもまぁ面倒な作業でした。

他のアルバイトにもそれとなく聞いてみると、僕と

元記事を表示

AWS FargateにRailsアプリケーションをデプロイする手順

[AWS Fargate](https://aws.amazon.com/jp/fargate/?whats-new-cards.sort-by=item.additionalFields.postDateTime&whats-new-cards.sort-order=desc&fargate-blogs.sort-by=item.additionalFields.createdDate&fargate-blogs.sort-order=desc)について無知だったので、RailsアプリケーションをFargateで動かすことを目指して、色々触っていました。

とりあえず、RailsアプリをGithubActionsで自動デプロイして[Sidekiq](https://github.com/mperham/sidekiq)も裏で動く、みたいなところまでできるようになりましたので、その手順を半年後の自分でもわかるように残しておきます。

※本番環境で使われるベストプラクティスを示しているとかではありません。ご了承ください :pray:

## AWSコンソールでの設定

東京リージョンを

元記事を表示

【Rails】Rubocopの導入

# 目的
Railsで作成したアプリに`Rubocop`を導入する。

# 開発環境
macOS: *Big Sur*
Rubyバージョン: *2.6.5*
Railsバージョン: *6.0.0*

# 前提

– `アプリ`が作成されている。
[【Rails】簡単な投稿アプリの作成](https://qiita.com/oak1331/items/18a4f3a3386aab0fa354)

# 手順

1. [はじめに](#はじめに)
1. [Rubocopの導入](#rubocopの導入)
1. [Rubocop設定ファイルの作成](#rubocop設定ファイルの作成)
1. [Rubocopの設定](#rubocopの設定)
1. [Rubocopの実行](#rubocopの実行)

# はじめに

今回は`Rubocop`の導入を行っていきます。
`Rubocop`とはRubyの静的コード解析ツールのことです。
「インデントが揃っていない」「余分な改行・スペースがある」などの指摘を行ってくれるため、コードの品質を保つことができます。

# Rubocopの導入

それでは早速

元記事を表示

【Rails】プルダウンで投稿の公開範囲を設定する方法

#イメージ

#はじめに

自分のみ閲覧できるように投稿したい!公開、非公開等投稿の公開範囲を設定したい!!!
と思った時に、該当する記事が見つからない!!!!!不便だなと思ったので、ここにまとめておきます。

#環境
この記事では以下の環境(2021年6月22日時点)で実装できました。

Ruby: 2.6.6
Rails: 6.0.3

#つけていないといけない機能
①ログイン機能
②投稿機能

#実装

既に作成したテーブルに新しくカラムを追加する場合は
カラムを追加するマイグレーションファイルを作成する。

「rails g migration クラス名 カラム名:データ型」でコマンドを実行する。

例)tweetテーブルにprivacyカラムを追加する場合

“`
$rails g migration AddPrivacyToTweets privacy:string
“`

コントローラーにカラム名を追加する。
例):privacy

“`ruby:tweets_controller.rb
private
def tweet_params
p

元記事を表示

vscodeで{}ブロックを自動フォーマットして困った話

#はじめに
RSpecの勉強中に{}ブロックが`do…end`に変換されてしまって困った。その時の対処についてです。

#症状
“`rspec
it “does not delete the project” do
sign_in @user
expect do #ココ
delete :destory, params: { id: @project.id }
end.to_not change(project, :count) #ココ
end
“`
上記のコードを記述すると、画面遷移時に`expect{}`と書いた部分が`expect do…end`となって ~~RSpecを走らせることができなかった。~~

#誤りについて
追記:2021/06/23
@jnchitoさんからコメントを頂きました。
上記の内容でエラーを再現したところ、問題なく`Rubocop`が走ることを確認しました。

よく考えてみれば、`rubocop`自体は走った上で違反に引っかかっていただけの記憶もあります。となると上記の打ち消し線の表現は正しくありませんでした。

元記事を表示

[Ruby]Arrayメソッド fromとto の使い方

## はじめに
Railsで使えるArrayメソッドの`from`と`to`を使用したので備忘録として残しておきます。

## 使い方

#### 1. from
`from`は引数に指定した位置から配列の最後までの要素を配列として返します。

“`
[0,1,2,3].from(2)
=> [2,3]
“`

#### 2. to
`to`は引数に指定した位置まで要素を配列として返します。

“`
[0,1,2,3].to(2)
=> [0,1,2]
“`

元記事を表示

Docker上のRailsのActiveStorageでActiveStorage::IntegrityErrorが出る

# 背景
私は普段Railsのアプリ開発でDockerではなくローカル上のrbenvから起動しているので遭遇しなかったのですが、最近フロントの業務委託の方からセットアップ時に `ActiveStorage::IntegrityError` が出て作業が進められないという連絡があり、調査することになりました。

# 原因
`Rails ActiveStorage IntegerityError Docker` といったワードで検索したところ、まず最初に[こちら](https://scrapbox.io/ohbarye/ActiveStorage::IntegrityError_on_Docker_for_Mac_3.3.0)のサイトが見つかりました。ここにあるgithubのissueを見たところ、どうも原因はDocker for Macのバグ?ということでした。

# (一時的な)解決方法
いくつかあったのですが、手っ取り早い方法をいくつか

### 1. Docker for Macのダウングレード
先程のサイトにもあるように、とりあえずDocker for Macを3.2.2にダウン

元記事を表示

webpackerでBootstrap4の導入

# 初めに
Railsでwebpackerを使ってBootstrap4の導入方法のまとめ。
# 導入手順
1. Gemfileにwebpackerを追加して、インストール
(今回は既に入っていたので、飛ばしてます。)
“`Gemfile
gem ‘webpacker’, ‘~> 3.5
“`
2. bundle installの実行
3. Webpackerをプロジェクトにインストール
 `bundle exec rails webpacker:install`
これでWebpackerを実行するための各種ファイルが生成。
4. app/javascript以下にsrcというディレクトリを作成し、application.scssを作成。
ディレクトリはapp/javascript/src/application.scssとなる。
4. Bootstrapの導入
`yarn add bootstrap@4.3.1 jquery popper.js`を実行
5. BootstrapのJSをapp/javascript/packs/application.jsで、
C

元記事を表示

OTHERカテゴリの最新記事