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

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

DM、チャットにおける通知機能

## 参考記事
1.[RailsでややこしいDM機能を1万字でくわしく解説してみた](https://qiita.com/bindingpry/items/6790c91f374acc25bea2)
2.[【Rails】通知機能を誰でも実装できるように解説する【いいね、コメント、フォロー】](https://qiita.com/nekojoker/items/80448944ec9aaae48d0a)
3. [[Rails] 同じmodelを参照する外部キーを一つのmodelでもつ方法
](https://qiita.com/takeoverjp/items/bb56d6a8eae191cd3732)

## 前提
・DM機能(テーブル設計に関しては参考記事1と全く同じ)
## Roadmap
・モデルの作成
・モデルのリレーション
・通知機能の作成
・モデルに切り出し
・読んだ際に既読になる機能の作成

## モデルの作成
“`
$ rails g model Notification
“`
“`migration_file.rb
class CreateNotificatio

元記事を表示

railsの削除機能 destroyが機能しない原因と解決策

railsの削除機能が効かないのは
javascriptのjqueryが効いていないのが原因でした。
なので、以下のようなコードをapplication.jsに追加すると
削除機能が動くようになりました。

“`javascript:application.js
//= require jquery
//= require jquery_ujs
“`

https://qiita.com/ytleoo/items/6fa36f4f3e5b05df7b13

元記事を表示

ActiveAdmin のメニュー設定をすごく便利にする ActiveAdmin::MenuTree のご紹介

ActiveAdminのメニュー設定を便利にする [ActiveAdmin::MenuTree](https://rubygems.org/gems/activeadmin-menu_tree) というgemを作ったのでご紹介します。

### ActiveAdminとは

https://activeadmin.info/

https://github.com/activeadmin/activeadmin

ActiveAdminとは、Railsで管理画面をさくっと作れるフレームワークですね。とても便利です。

元記事を表示

【Rails】繰り返し処理におけるインデックスについて

#each do 文におけるインデックス

“`hoge.html.erb
<% @hoges.each_with_index do |hoge, i| %>

元記事を表示

OWSP Top10のとRailsにおける対策

Railsのセキュリティに関する記事は、[Railsセキュリティガイド](https://railsguides.jp/security.html)をはじめとして、たくさんありますが、
今回はOWSPのTop10に沿って、Railsにおけるその対策を書いていきます。

※あくまでも自分が調べた一部の機能や対策の紹介のため、これらの対策を全てやっていれば問題ないという訳ではありませんし、全てのRailsアプリケーションに同じ対策が当てはまるわけではありません。
また、一部対策の重複や、説明(引用)のみの項目もあります。

## 対象バージョン
Rails: 7.0

## OWSPとは?
https://owasp.org/www-chapter-japan/
>OWASP – Open Web Application Security Project とは、Webをはじめとするソフトウェアのセキュリティ環境の現状、またセキュアなソフトウェア開発を促進する技術・プロセスに関する情報共有と普及啓発を目的としたプロフェッショナルの集まる、オープンソース・ソフトウェアコミュニティです

##

元記事を表示

Rails 環境構築

## Homebrewをインストールする

https://brew.sh/index_ja.html

からコピペで実行

## rbenvをインストールする

“`
brew install rbenv
“`

## rbenvにPATHを通す

“`
echo ‘export PATH=”$HOME/.rbenv/bin:$PATH”‘ >> ~/.bash_profile

echo ‘if which rbenv > /dev/null; then eval “$(rbenv init -)”; fi’ >> ~/.bash_profile

source ~/.bash_profile
“`

1行ずつ実行

## Rubyをインストールする

“`
rbenv install -l
“`

### すきなバージョンをインストール

“`
rbenv install 2.7.1
“`

## ローカルで使うRubyのバージョンを指定する

“`
rbenv local 2.7.1
“`

## Bundlerをインストールする

“`
gem ins

元記事を表示

【PostgreSQL】サーバーを起動時にエラーが発生

## エラーの発生内容
“`rb
ActiveRecord :: ConnectionNotEstablished
PG::ConnectionBad: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket “/tmp/.s.PGSQL.5432”?
“`

## やったこと
– PC自体を再起動 → NGだった
– `psql -V`を実行
– バージョンが`psql (PostgreSQL) 14.1`
– `brew services list`を実行
– postgresql が error
– `tail -n 20 /usr/local/var/log/postgres.log`を実行

“`rb
2022-02-04 05:55:21.403 JST [4050] FATAL: database files are in

元記事を表示

ActiveModel::MissingAttributeError: can’t write unknown attribute “ に悩まされた【Rails】

RailsのAPIを一から作っている時に遭遇しました。ググっても全然引っかからないし「もぅマヂ無理。。。リスカしょ。。。」ってなってました。ですが結構基本的なところでポカしてました。

結論から言えば,`primary_key: true`を書き忘れていただけだったのですが。なぜこれでエラーが出たのか考えてみます。

# Railsでprimary_keyのカラムを変える手順

https://guides.rubyonrails.org/active_record_migrations.html#creating-a-table

Railsでprimary_keyを変更する手順は、以下の通りです。

1. `create_table`メソッドに、`id: false`を渡す
1. `create_table`メソッドのブロックに、`primary_key: true`を渡したフィールドを作る

もし`primary_key`自体いらねえよって時は,`create_table`に`id: false`を渡すだけで`primary_key`自体作らなくなります。

お手本は、
“`

元記事を表示

【Rails】条件に応じて、適用するCSS(セレクタ)を変える(備忘録)

みなさん、こんにちは!
筆者は大学生限定のプログラミングスクール「GeekSalon」でメンターをしています!
興味のある方や話だけでも聞いてみてい方はぜひのぞいてみてください?

https://geek-salon.com/?utm_source=Direct&utm_medium=attract&utm_campaign=3Q&utm_content=Fukuoka_B1_3Q

さっそく今回の本題に入っていきます!
今回は、条件に応じて適用するCSSのセレクタを変えるというものを実装していきます。

筆者は、投稿にカテゴリ(category)のカラムを追加しており、そのカテゴリに応じて投稿の背景色が変わるというものを実装しました!
完成イメージは以下のようになります

![image (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2429739/09510018-1a0f-b25c-05b7-0d716dc54c57.png)

##実装環境
ruby 2.7.4p191 (2021-

元記事を表示

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カラムを追加する

### データベース

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

元記事を表示

OTHERカテゴリの最新記事