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

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

class<

ruby書いているとタイトルのような記述を見たことがある人は多いとおもいます。自分はよくわからなかったので今回の記事でまとめてみようとおもいます。

こういう時はとりあえず公式ドキュメントを見てみようと思ったので見てみました。すると、
>特異クラス方式。複数のメソッドを一度に定義するとき向き
>https://docs.ruby-lang.org/ja/3.0/doc/spec=2fdef.html#class_method

## 特異メソッドとは?
特異メソッドとは1つのオブジェクトに対して適用されるメソッドのことです。実際に例を見ていきましょう

“`
class User
def my_name
puts “自己紹介しましょう”
end
end

ouki = User.new
riboku = User.new

def ouki.introduction
p “秦国最強の将軍である”
end

ouki.my_name
=> 自己紹介しましょう

riboku.my_name
=> 自己紹介しましょう

ouki.introduction
=> “

元記事を表示

Rails index.html.erbとindex.htmlの違いについて

# 1. はじめに

Ruby on Railsで`index.html.erb`の`erb`ってなんだってなりますよね。
`index.html`との違いってなんだろって思ったと思います。
そんなみんなの助けになればな!っと思ってこの記事を書きます。

# 2.index.htmlとindex.html.erbの違いについて

***html.erb***とはなんだろうって思いますよね
***html.erb***ファイルはHTMLなどの文章の中にRubyスクリプトを埋め込むためのライブラリのことです。
これは、***Rubyスクリプトが組み込まれたhtmlファイルのようなもの***と覚えてもらえれば、大丈夫です。

# 3. index.htmlとindex.html.erbの記述の違いについて

index.html.erbファイルには***Rubyスクリプト***で書き込みます。
Rubyスクリプトで記述されていても、パソコンで表示をされるときは、***htmlファイル***に変化されます。

これから違いをコードで表示していきます。

### 1. html.erbファイル

元記事を表示

N+1問題の直感的理解

#N+1問題
例えば、user(has_many :posts)なるテーブルと、post(belongs_to :user)なるテーブルの二つがあるとする。
userは0個以上のpostを持っていて、postには各userのid(user_id)が必ず対応している。
ここで、各userの持っているpostを取り出し、userの名前(user.name)と、postのタイトル(post.content)を全件表示したいとき、どのようなコードを書けばよいだろうか。

最も分かりやすいのは以下のコードだろう。

“`ruby:view
User.all.each do |user|
user.posts.each do |post|
puts “#{user.name} / #{post.title}”
end
end
“`
このコードで実行される内容は、

1. userの情報を取得するために、userテーブルにアクセス
2. id = 1のuserのpostの情報を取得するためにpostテーブルにアクセス
3. id = 2のuserのpostの情報を取得するためにp

元記事を表示

request.env[“HTTP_USER_AGENT”] について

request.env[“HTTP_USER_AGENT”] というのを実務で見かけてよくわからなかったのでまとめてみようとおもいます。

## 何ができるのか?
結論からいうと、これを使うことでどのブラウザからアクセスしているのか、どのデバイスからアクセスしているのかということがわかるんです。
例えば、
“`
request.env[“HTTP_USER_AGENT”].include? “Chrome”
“`
とすることでユーザーがchromeを使ってアクセスしているのか、ということがわかるんです。
また、
“`
request.env[“HTTP_USER_AGENT”].include? (‘Mobile’)
“`
とすることで、アクセスしているユーザーの端末はiOSなのかandroidなのかということが分かります。

MobileはiPhoneやiPadなどのapple製品で、androidはその名の通りandroid系です。

自分はまだ経験したことはないですが、OSやブラウザごとに処理を変えたい時に使うものなんだとおもいます。

以上です。何か間違いがございまし

元記事を表示

既存のRails(APIモード) × React × Nginx × MySQLで作成したSPAをDocker化

# 概要

新規にDockerで開発環境を構築するのではなく、既存のローカルのSPAをDocker化するために自分が行ったことをご紹介します。
また、本番環境ではWebサーバーにNginxを使用しているため、環境ごとの差分を少なくするために、開発環境でもフロントエンド側にNginxを使用しています。

# バージョン
|| バージョン |
|:-:|:-:|
| OS | macOS Catalina |
| ruby | 2.7.0 |
| Rails(APIモード) | 6.0.4 |
| React | 17.0.2 |
| Node | 14.4.0 |
| MySQL | 8.0.28 |
| Docker | 20.10.6 |
|Nginx|1.20.0|

# ディレクトリ構成

“`bash:myapp
.
├── app
├── config
├── frontend
│  ├── Dockerfile
│  ├── nginx.conf
│   ├── node_modules
│   ├── package-lock.json
│   ├──

元記事を表示

gem bullet による警告が消えても必ずログを確認する必要がある

初学者向けに書きました。
これはまだ自分が初学者だった頃のメモです。もはや何番煎じかわからない内容ですが、何か記事を書きたかったので書きました。
間違い等ありましたら申し訳ございません。ボコボコにコメントしてやってください。すぐ直します。

# 伝えたいこと
– bulletを使用していても検知されないN+1問題がある。
– bulletによる警告が出ていないからといって満足して終わらないように。ちゃんとチェックしよう。
– N+1問題が解決していても本当にそれが最適な処理になっているのか吟味しよう。

# bullet とは
– N+1問題を検知するgemです。詳しくは[公式](https://github.com/flyerhzm/bullet)で。

# 問題①:検知できないN+1問題
例えば、以下のコードはN+1問題を発生させますが、この問題はbulletでは検知できません。

“`ruby
class Post < ApplicationRecord has_many :comments end @posts = Post.preload(:comments)

元記事を表示

Amazon LightsailでRailsアプリをデプロイしたい(PostgreSQL)

## やりたいこと
エンジニア階級「癸(みずのと)」なりに、フランス語のアプリをガチで個人開発しています。:flag_fr:
今回は、いよいよ本番リリース。
Amazon Lightsailで個人開発のRailsアプリをデプロイしたいです。

Lightsailと言えど、サーバーのインスタンスとして使われているのはAWS EC2。基本的には下のリンクの記事を見れば、ある程度pikaわかるのですが(ほんとありがたい)、一部DBの設定などが違ったので自分がうまくいった手順を日記としてメモしておきたいと思います。

**全然体系立ってないですがご容赦ください!**
部分的に誰かの為にもなれば幸いです。

https://pikawaka.com/rails/ec2_deploy

実際にデプロイしたサイトはこちら。

https://minnfra.com

フランス語勉強している方はぜひ使ってみてください。

## 実装!

### 1. インスタンスの作成

![Capture d’écran 2022-01-01 à 20.38.23.png](https://qiita-imag

元記事を表示

【初学者】Herokuデプロイ時に詰まったこと【Webアプリ開発の道~その2~】

# はじめに
こんにちは。「塵も積もれば山となる」精神で日々学習しながら、Webアプリ開発に取り組んでいます。

# 何を書いたか
今回はローカル環境で作成したRails6アプリ(Hello,Worldの出力)をHerokuにデプロイする際に詰まったことについて書きます。Railsチュートリアル(第6版)では1章と3章前半部分の内容です。

# なぜ書いたか
RailsチュートリアルどおりにAWSのCloud9を開発環境として、Herokuにデプロイしたときにはすんなり上手くいったのですが、ローカル環境からHerokuにデプロイしようとすると、まぁまぁ大量のエラーが発生しました笑

前回の[ローカル環境構築](https://qiita.com/kosukein38/items/aff73fda16a1447e6db3) に続き、こちらも一日がかりでデバッグして、ようやくデプロイ成功したので、エラーデバッグ方法を備忘録として記事にしました。同じような境遇になった方の参考になれば幸いです。

エラーのデバッグが経験値を上げると信じて、できるだけエラーの意味を解釈しながら進めていったつもり

元記事を表示

Rails ‘error Command “webpack” not found.’について

#内容
ターミナルにて

“`
$ rails s
“`

をした際、

“`
Webpacker::Manifest::MissingEntryError
Webpacker can’t find application in /public/packs/manifest.json. Possible causes:
1. You want to set webpacker.yml value of compile to true for your environment
unless you are using the `webpack -w` or the webpack-dev-server.
2. webpack has not yet re-run to reflect updates.
3. You have misconfigured Webpacker’s config/webpacker.yml file.
4. Your webpack configuration is not creating a manifest.
Your manifest co

元記事を表示

link_toにclassを付けるのにハマった話とその対処法

## やりたかったこと
・aタグにclassを設けて、flexboxを使う。
## 前提
・Ruby 3.0.2
・rails 6.1.4.4
・Bootstrap、slim導入済み
※htmlはslimで記述しています。erbの方は、適宜erbに読み替えてください。
今回、controllerとactionを指定して、リンク先を設定してます。
## 先に結論
以下のように記述することで解決できました!

“`slim:
= link_to({ controller: ‘messages’, action: ‘roomshow’, to_user_id: message_user_id }, class: “d-flex flex-row”) do
“`
## 失敗したパターン
######1. classを普通に追記する

“`slim:
= link_to controller: ‘messages’, action: ‘roomshow’, to_user_id: message_user_id, class: “d-flex flex-row” do
“`

“`ht

元記事を表示

Rails ToDoアプリ タスク管理アプリ (期限切れ・締め切り順・完了ボタン)

# はじめに
雑記事です。また時間を見つけてブラッシュアップいたします。

##完成図
![スクリーンショット 2022-02-19 6.33.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081227/f9517dd6-6b17-785d-7b13-1948c146b7a2.png)

・タスク一覧に残り期限が表示されている
・タスク一覧にタスクが期限順に並んでいる
・期限切れの未完了タスクの表示を変更している
・未完了タスクに完了ボタンが表示されている
・完了ボタンを押すと、完了したタスク一覧に完了日時が表示される

##前提
タスクの簡単なタイトル投稿が作成済みであること
Railsの基礎的な知識を身につけていること

##実装方法
まずタスクを保存する該当のテーブル(本記事ではtweetsテーブル)にタスクの期限を格納するtimeカラムと、タスクが完了した日を格納するdone_atカラムを追加する

### データベース

以下のコマンドでマイグレーションファイルを生成します。

元記事を表示

Ignoring racc-1.5.2 because its extensions are not built. Try: gem pristine racc –version 1.5.2が出た時の対処法

## はじめに
こちら自分用のメモであるためとても雑な記事です。
ただ、同じようなエラーが出た人の助けに少しでもなれば幸いです。
## エラーログ
railsコマンドをターミナルで実行すると無限に以下のメッセージが吐き出される

![スクリーンショット 2022-02-19 2.36.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081227/5842c8d9-4536-f834-133e-3927a7a3c897.png)

“`.zsh

Ignoring racc-1.5.2 because its extensions are not built. Try: gem pristine racc –version 1.5.2
Ignoring racc-1.5.2 because its extensions are not built. Try: gem pristine racc –version 1.5.2
Ignoring racc-1.5.2 because its

元記事を表示

区間が重なるためのある条件式と `Range#overlaps?` の定義は同じなのか

Rails で定義されている [`Range#overlaps?`](https://api.rubyonrails.org/classes/Range.html#method-i-overlaps-3F) の[定義](https://github.com/rails/rails/blob/2459c20afb508c987347f52148210d874a9af4fa/activesupport/lib/active_support/core_ext/range/overlaps.rb#L8)は

“`rb
def overlaps?(other)
cover?(other.first) || other.cover?(first)
end
“`

となっている。`other` と対比しやすいよう `self` を補うと

“`rb
self.cover?(other.first) || other.cover?(self.first)
“`

となる。

ところで、区間が重なっているか調べるには

“`rb
self.first <= other.end && oth

元記事を表示

【rbenv】`rbenv install 3.1.0`実行時の`BUILD FAILED`を解消した方法【Ruby】【Rails】

##`rbenv install 3.1.0`実行時の`BUILD FAILED`を解消した方法

### 状況
M1 macで以前にRuby 2.7.5をインストールしていました。
OSを11.6.4(Big Sur)から12.2.1(Monterey)にバージョンアップした後にRubyをバージョンアップするために、`rbenv install 3.1.0`を実行した際に、以下のエラーが出てインストールができませんでした。

“`:ターミナル
$ rbenv install 3.1.0
Downloading openssl-1.1.1l.tar.gz…
-> https://dqw8nmjcqpjn7.cloudfront.net/0b7a3e5e59c34827fe0c3a74b7ec8baef302b98fa80088d7f9153aa16fa76bd1
Installing openssl-1.1.1l…

BUILD FAILED (macOS 12.2.1 using ruby-build 20211227)

Inspect or clean up the w

元記事を表示

Provideメソッド

#使い方

:titleに’sample’定義

“`erb:sample.html.erb
<% provide(:title, 'sample') %> 
“`

yieldで:titleに定義した’sample’を受け取って描写

“`erb:sample_application.html.erb
<%= yield(:title) %>
“`

####例)ボタンの文字の場合

:button_textに’Button’を定義

“`erb:button.html.erb
<% provide(:button_text, 'Button') %>
“`

f.submitでボタン作成、そのボタン上の文字にyield(:button_text)で受け取ったButtonを描写する

“`erb:button_application.html.erb
<%= f.submit yield(:button_text), class: "btn" %>
“`

元記事を表示

【Rails】Railsの環境構築(M1 mac)

## はじめに
環境構築はエラーが出ることが多く、その原因の特定も困難であるため完了までに時間がかかってしまうことがありますが、その都度エラー文をしっかりと確認し、一つ一つ解消していけばいつかは必ず環境構築ができますので粘り強く対応してみてください。
本記事に私自身が環境構築をした際に調べた事項について併せて記載していますので参考にしてください。
また、エラーを解消するために情報収集をする際にはGitHubのissueも確認するようにしてください。

https://github.com/rails/rails/issues

## Railsの環境構築(M1 mac)

### Homebrewをインストール
https://brew.sh/index_ja.html

上記URLにアクセスしてください。
![スクリーンショット 2022-02-18 18.35.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/e562b960-e37d-2160-8500-1d637785f1d

元記事を表示

FontAwesomeでアイコンを挿入する

#はじめに

学習記録アプリを開発中で、学習履歴を一覧表示していました。そこに削除用のアイコンをつけたいと思い、今回FontAwesomeを導入していきます。

#環境
– rails 6.0.4.4
– ruby 2.6.5

#FontAwesomeの導入
FontAwesomeアカウントを登録したのちに、公式サイトのヘッダー部分の「Kits」をクリックします。
その後、自分専用コードをクリックすると埋め込み用のコードが表示されます。

“` application.html.erb

“`

これをHTMLファイルのhead要素内に記述します。
(今回はRailsなのでapplication.html.erbのhead要素内に記述する。)

補足
ちなみに登録はEmailとpasswordだけ入力すればすぐにできます。
FontAwesome公式 https://fontawesome.com/

# F

元記事を表示

i18n-js を importmap-rails で使う

## はじめに
Rails アプリで使用される [i18n](https://github.com/ruby-i18n/i18n) の JavaScript 版のライブラリとして [i18n-js](https://github.com/fnando/i18n-js) があります。
自分の Rails プロジェクトで Webpacker -> importmap-rails の移行をするにあたって、 i18n-js の移行にかなり試行錯誤したので、自分の使い方を記載しようと思います。

Webpacker -> importmap-rails の移行については別記事を書きました。 -> [Webpacker から importmap-rails に移行した](https://qiita.com/mishina2228/items/d4b9af22d0096ee451d7)

## 前提
元々は、i18n-js のREADME の [Rails with webpacker](https://github.com/fnando/i18n-js/tree/v3#rails-with-web

元記事を表示

[Rails] FactoryBotの実装

# FactoryBot
FactoryBotはRailsでテストサンプルデータを簡単に扱えるように考えられたgem。
rspecと組み合わせて使われる例をよく見ます。

##使い方
###初期設定
“`ruby:spec/rails_helper.rb
config.include FactoryBot:Syntax::Methods # Rspec.configureの中に記述
“`

###Factoryの定義
“`ruby:spec/factories/ex.rb
FactoryBot.define do
factory :ex_user do
name {“user1”}
password {“password”}
end
end
“`
上記の例ではfactoryの名前がex_userでその中に名前とパスワードが格納されています。

###Specへ記述
“`ruby:specテスト内
example “xxxのテスト”
m = build(:ex_user)
end
“`
ex_userをspec内でbuildすることで、テスト内で使用

元記事を表示

[備忘録]ActiveAdminで子モデルの要素を引っ張ってくる記述方法

どうも。

受託開発で管理画面の開発をバリバリやっていたとき詰まったところを書いていく

activeadminで子モデルを参照するとき、
・permit_params
・filter
・index/show
・inputs
で書き方が異なる

##今回使うモデル例
“`user.rb
has_one :profile
has_many :items
“`

“`profile.rb
belongs_to :user
“`

“`item.rb
belongs_to :user
“`

“`schema.rb
ActiveRecord::Schema.define(version: 2022_XX_XX_XXXXXX) do
create_table “users”, force: :cascade do |t|
t.string “username”
t.datetime “created_at”
t.datetime “updated_at”
end

create_table “profiles”, force: :cascade do |t|

元記事を表示

OTHERカテゴリの最新記事