- 1. 【Rails】【Ajax】コメント投稿・削除を非同期通信化する。
- 2. Railsバージョンアップにおける変更PRの特定の仕方
- 3. Railsで作成したテーブルのidを初期化する
- 4. Railsのタスクを定義する
- 5. 【Rails】(デプロイ初心者)Capistranoを使ってEC2に自動デプロイしたときに発生したエラーと対処法
- 6. decimal と int の違いってなんや?
- 7. Rails7のローカル開発環境をhttps接続させる
- 8. 【Rails】制限時間機能を実装してみた。(解説付き)
- 9. 数値がどうかを検証する
- 10. 定義した値かどうかを検証する
- 11. 正規表現を使うバリデーション
- 12. macOS に rvm をインストールする
- 13. rails + tailwind でherokuにデプロイするとエラーになる
- 14. Ruby if文, unless文についてまとめました2
- 15. Ruby if文, unless文についてまとめました1
- 16. data-turbo-confirm の確認ダイアログをカスタマイズする方法
- 17. 【初心者向け】git clone後に生じるアプリケーションのエラーについて
- 18. いいね機能の非同期化
- 19. プログラミングスクール2ヶ月目。rails コマンド メモ
- 20. Rails×MySQL dockerで開発環境を構築する
【Rails】【Ajax】コメント投稿・削除を非同期通信化する。
# はじめに
プログラミング初学者の者です。オンラインでプログラミングを学習させて頂いてるのですが、さらに理解を深めていきたいと思い、学習したことを備忘録として、残して理解を深めていきたいと思います。
また、間違った点など、ありましたら、ご指摘いただけると幸いです。よろしくお願いします。# 前提
Railsにて投稿アプリケーションを作成のち、投稿に対して、コメントできる機能実装済み。
今回は離乳食を投稿するアプリケーションで実装しています。# 目標
### コメント機能が非同期で行えるようにする
[![Image from Gyazo](https://i.gyazo.com/77a19537f3913ba1aae0c363e79f5193.gif)](https://gyazo.com/77a19537f3913ba1aae0c363e79f5193)# 手順
①jQueryの導入
②コメント表示部分を部分テンプレート化
③投稿機能の非同期化
④削除機能の非同期化# ①jQueryの導入
“`text.Gemfile
———略———
gem
Railsバージョンアップにおける変更PRの特定の仕方
## 本記事について
Railsに特化して書いているが汎用的ではある。
CHANGELOG.mdなファイルに全部載ってたら楽だが、全てのライブラリがそうではない。
じゃあどうやって調べるのかという話。## 環境
ruby 2.7.5
Rails 6.1.7.1## 本記事の題材
“`.rb
Rails 6.1の場合
[1] pry(main)> Time.current
=> Tue, 31 Jan 2023 10:12:36.749685920 JST +09:00Rails 6.0の場合
[1] pry(main)> Time.current
=> Tue, 31 Jan 2023 10:06:14 JST +09:00
“`Time.current.class
=> ActiveSupport::TimeWithZoneなため、ここに変更があったのかなと予想できる
ナノ秒出力されるようになってる!
## 調べ方1 変更が加わったバージョンを特定し、Releasesで確認
https://github.com/rails/rails/releases
Railsで作成したテーブルのidを初期化する
## 環境
Rails 5.2
PostgreSQL12.10## はじめに
タイトルにある通り、Railsで作成したテーブルのidを初期化する方法についての記事です。テーブルを全件トランケートした後、データを新規登録をすると、id=1から振り直してくれるものと期待していても、そのようにはしてくれません。全件トランケートしたとても、最後に登録したidの次から連番で振り続ける仕様になっています。
idはあくまで、内部的に管理される項目であるため、idに何が登録されようが、気にしなければいいのですが、1からきれいに連番で登録されていないと気持ちが悪いという人は、idを初期化する必要があります。
## やったこと
PostgreSQLにログインします。
“`
$psql -h localhost -d DB名 -U ユーザーID
“`全てのidを表示させてみます。
“`
#select id from users order by id;
“`データ件数が大量にある場合は1件に絞り込んで、idのMAXを調べます。
“`
#select max(id) from u
Railsのタスクを定義する
Ruby on Railsアプリケーションを開発で定型の操作を繰り返すときは、タスクを定義すると便利です。
## 前提条件
あるRailsアプリケーションでは、ファイルアップロードジョブの途中で例外がおきたとき、処理途中のファイルやレコードが残ります。このため、開発の途中でしばしば次のコマンドを実行して、ゴミ掃除をしています。
“`sh
bin/rails runner ‘Job.destroy_all’
rm -rf tmp/upload-*
“`## テンプレートの作成
今回はこのコマンドをRailsのタスクにしてみたいと思います。
Railsのタスクの実体はlibディレクトリ配下にあるRakeタスクです。
テンプレートをRailsのジェネレートコマンドで作ることが出来ます。まず、最初にどのようなコマンドで、実行できると良いか考えてみましょう。
ジョブのゴミ掃除なので、`job:clean`が良いと思います。
完成したら次のように実行するイメージです。“`sh
bin/rails job:clean
“`タスク名がきまったらジェネレートコマンドでテン
【Rails】(デプロイ初心者)Capistranoを使ってEC2に自動デプロイしたときに発生したエラーと対処法
AWS環境に自動デプロイというのを自分で1からやってみたくなったので、`Capistrano`を使ってEC2にRailsアプリをデプロイしました。
「ググって出てきた簡単な使い方通りに進め、1通り手順とかイメージ掴めればいいかな〜」くらいの気持ちでやったのですが、エラーがかなり出て勉強になったので対応と合わせてまとめておきます。## 基本的に参考にしたサイト
https://github.com/capistrano/capistrano
https://github.com/capistrano/rails
[【Rails】 AWSのEC2にデプロイする方法~画像で丁寧に解説!](https://pikawaka.com/rails/ec2_deploy)
[【Rails】 Capistranoを使ってデプロイを自動化しよう](https://pikawaka.com/rails/capistrano)
## あらかじめお伝え– エラーメッセージの深掘りができていない点が多々あります
※今回の私の目標は「Capistranoを使って自動デプロイの手順を1通り経験すること」であ
decimal と int の違いってなんや?
# はじめに
Rails の開発でテーブル作成時に decimal と int を使い分けている PR を見かけたので、dicimal と int の違いについて調べてみました。
間違いあったらご指摘ください ?# 結論
decimal は固定長整数型, integer は整数型(4 バイト)
decimal は、全体の桁数-精度(precision)と小数点以下の桁数(scale)を指定された浮動小数点データに対し、
integer は、整数だ!!!!# データ型種類一覧
| データ型 | 種類 |
| :———- | :————— |
| primary_key | プライマリーキー |
| string
Rails7のローカル開発環境をhttps接続させる
# 概要
Rails7のローカル開発環境をhttpsで接続させる方法について調べたのでメモとして記載
調べるといくつか方法はあるが、今回は`https-portal`を使ってアクセスできるようにしてみた以下の記事をなぞりつつ、途中でつまづいた部分を記録
https://zenn.dev/dragonarrow/articles/1f3c34e31d0acc# 前提
* local環境のdockerでRails7が動く# local環境
* M1 Mac
* OS:Monterey# 流れ
## /etc/hostsにドメインを追加
local環境で`/etc/hosts`ファイルに以下を追加“`hosts
127.0.0.1 devsite.local
“`## docker-compose.ymlにhttps-portalを追加
environmentのDOMAINSにhostsで指定したものと同じものを指定“`docker-compose.yml
:
:
https-portal:
image: steveltn/https-por
【Rails】制限時間機能を実装してみた。(解説付き)
## 1.バージョンを確認しましょう!
Rails 5.1.6
ruby 2.7.2p112## 2.完成イメージ
投稿に制限時間を設定し、何かしらの処理をつける機能です。
今回は **「投稿(タスク)を設定し、制限時間を超えると通知が来る機能」** を実装する準備段階です。## 3.実装の大きな流れ
>1.投稿モデル(Tweet)に、制限時間を保存するカラムを追加する。
>2.投稿を保存するときに、制限時間と現在時刻を比較して、制限時間が過ぎていないかをチェックするアルゴリズムを記入する。
>3.制限時間が過ぎている場合はエラーを返し、投稿を保存しない設定を仕込む。ちなみに本記事はこのような目次で進んで行きます!
一緒に楽しんでいきましょう ᕙ( ˙꒳˙ )ᕗ## 4. モデルに、制限時間を保存するカラムを追加しよう。
“`ターミナル
$ rails generate migration AddLimitTimeToTweets limit_time:datetime
$ rails db:migrate
“`tweetsテーブルに、**limit_
数値がどうかを検証する
# 2.9 numericality
このヘルパーは、“`属性に数値のみが使われていることを検証“`します。デフォルトでは、“`整数値または浮動小数点数値にマッチ“`します。これらの“`冒頭に符号がある場合もマッチ“`します。
“`:only_integer“`をtrueに設定すると、属性の値に対するバリデーションで以下の正規表現が使われます。
“`
/\A[+-]?\d+\z/
“`
それ以外の場合は、Floatを用いる数値の変換を試みます。Floatは、カラムの精度または15を用いてBigDecimalにキャストされます。
“`rb
class Player < ApplicationRecord validates :points, numericality: true validates :games_played, numericality: { only_integer: true } end ``` :only_integerのデフォルトのエラーメッセージは「must be an integer」です。 このヘルパーでは、:only_int
定義した値かどうかを検証する
# 2.7 inclusion
このヘルパーは、“`指定の集合に属性の値が含まれているか“`どうかを検証します。集合には任意のenumerableオブジェクトが使えます。
“`rb
class Coffee < ApplicationRecord validates :size, inclusion: { in: %w(small medium large), message: "%{value} のサイズは無効です" } end ``` inclusionヘルパーには:inオプションがあり、受け付ける値の集合を指定します。```:inオプションには:withinというエイリアスもあり、好みに応じてどちらでも使えます。``` 上の例では、属性の値をインクルードする方法を示すために:messageオプションも使っています。完全なオプションについては、:messageのドキュメントを参照してください。 このヘルパーのデフォルトのエラーメッセージは```「is not included in the list」```です。 # 出典 https://railsguides.jp
正規表現を使うバリデーション
# 2.6 format
このヘルパーは、withオプションで“`与えられた正規表現と属性の値がマッチ“`するかどうかを検証します。
“`rb
class Product < ApplicationRecord validates :legacy_code, format: { with: /\A[a-zA-Z]+\z/, message: "英文字のみが使えます" } end ``` ```:without```オプションを使うと、```指定の属性にマッチしない正規表現を指定することもできます。``` デフォルトのエラーメッセージは「```is invalid```」です。 ### 出典 https://railsguides.jp/active_record_validations.html#:~:text=2.6%20format,is%20invalid%E3%80%8D%E3%81%A7%E3%81%99%E3%80%82 # 感想 正規表現が大変だった。
macOS に rvm をインストールする
macOS に `rvm` (Ruby Version Manager) のインストール方法を記述します。
※ `rvm` とは、`ruby` バージョンの切り替えソフトウェアです。## 環境
– macOS Ventura バージョン 13.1
## Install GPG keys
– `GPG` (GNU Privacy Guard) パッケージのインストールします。
“`sh
brew install gpg
“`– `rvm` インストールパッケージの検証に使用する `GPG` キーをインストールします。
“`sh
gpg –keyserver keyserver.ubuntu.com –recv-key 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
“`※ [公式ページ](https://rvm.io/rvm/install) に書いてあるコマンドを使うとエラーになります。
`gpg: 鍵サーバからの受信に失敗しました: S
rails + tailwind でherokuにデプロイするとエラーになる
# 概要
タイトルのままだが、rails + tailwindcss使ってherokuデプロイ時にエラーになる。
ちなみにローカルでは正常に動く。# 前提
## バージョン
– Rails 7.0
– tailwindcss 3.2.4## エラー内容
“`
remote: rake aborted!
remote: SassC::SyntaxError: Error: Function rgb is missing argument $green.
remote: on line 1 of stdin
remote: >> dden]){–tw-divide-opacity:1;border-color:rgb(229 231 235/var(–tw-divide-op
remote: ——————————————^
“`# 解決方法
“`rb:config/environments/production.rb
#
Ruby if文, unless文についてまとめました2
こちらの続きとして書きます。
https://qiita.com/ta–i/items/a16aa2780e3849b21338
# 条件分岐処理
ifからunlessに書き換える例を3つ挙げてみました。## ifからunlessに書き換える例1
“`ruby
if 100 == 10
puts “同じ数字です”
else
puts “違う数字です”
end
“`上記if文をunless文で書き換えると次のようになります。
“`ruby
unless 100 == 10
puts “違う数字です”
else
puts “同じ数字です”
end
“`## ifからunlessに書き換える例2
“`ruby
if 100 + 10 > 0
puts “0より大きい数字です”
else
puts “0より小さい数字です”
end
“`上記if文をunless文で書き換えると次のようになります。
“`ruby
unless 100 + 10 <= 0 puts "0より大きい数字です" else puts "0より
Ruby if文, unless文についてまとめました1
# 条件分岐処理
## if文
「もし〇〇だったら□□をする」という処理をします。“`ruby
if 条件式
処理1(条件式がtrueのときに実行)
else
処理2(条件式がfalseのときに実行)
end
“`
if文は、条件式が「正しい」か「正しくないか」で実行する処理を分岐させています。
***「正しい」 = true***
***「正しくないか」 = false***
条件式が正しい(true)なら、処理1を実行。
条件式が正しくない(false)なら、処理2を実行。## unless文
「もし〇〇だったら□□をする」という処理をします。
unless文はif文と反対で、条件式が「偽(false)」の時に処理が実行されます。
unless文にelsif を指定することはできないです。公式リファレンスを参考にしました。
https://docs.ruby-lang.org/ja/latest/doc/spec=2fcontrol.html#unless“`ruby
unless 条件式
処理1(条件式がfal
data-turbo-confirm の確認ダイアログをカスタマイズする方法
## 完成イメージ
![turbo-confirm.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/990603/c42d3330-8c6c-fa43-40ba-08513f723509.gif)
## はじめに
Turbo では、フォームやリンクに `data-turbo-confirm` 属性をつけると確認ダイアログを表示できます。
https://turbo.hotwired.dev/handbook/drive#requiring-confirmation-for-a-visit
https://railsguides.jp/working_with_javascript_in_rails.html#%E7%A2%BA%E8%AA%8D%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0
通常はブラウザ標準の確認ダイアログ `window.confirm()` が使われます。
https://developer.mozilla.org/ja/do
【初心者向け】git clone後に生じるアプリケーションのエラーについて
## はじめに
先日、githubのリポジトリからローカル環境にアプリケーションをクローンし、動作確認をしようとしたところエラーが生じてしまいました。解決策を発見できたので共有します。## アプリケーションの動作確認
リポジトリから自作のアプリケーションをクローン。サーバを立ち上げて動作確認をしようとすると・・・
![ツイートアプリケーション課題で出ているエラー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116202/69203d9e-819e-c6aa-d515-115ee220a22e.png)__あれ・・・?なんで? リポジトリにpushする前はちゃんと動いていたのに・・・__
## 解決策を探る
いろいろ調べてみると、アプリのディレクトリでbundleをインストールすると問題が解決できる可能性があることが判明しました。さっそく、「bundle exec rake webpacker:install」を実施し、サーバを立ち上げ、アプリを開いてみると・・・![2
いいね機能の非同期化
# 1.非同期機能とは
– 画面全体を更新せずに、一部だけ更新すること
– Ajaxという手法が使用されます。# 2.実装
### 2−1.リンクに`remote: true`を追記する
– これにより、リクエストがhtml形式からjs形式になる
“`:app/views/posts/show.html.erb
<% if current_user && @post.favorited_by?(current_user) %>
<%= link_to post_favorites_path(@post), method: :delete, remote: true, class: "favorite_btn" do %>
♥<%= @post.favorites.count %> いいね
<% end %>
<% else %>
<%= link_to post_favorites_path(@post), method: :post, remote: true, class: "favorite_btn" do %> #ここ
♡<%= @post.favor
プログラミングスクール2ヶ月目。rails コマンド メモ
今まで学んだことを書いていこうかなと思いまして、アウトプット用に記事を書かせていただきます。
1ヶ月目では、html,css,ruby,railsで、基礎を学んできました。
html/cssでは、メディアクエリ、bootstrapを学び、
アプリケーションの作成から、gemの導入、bootstrapの導入などを学びました。railsで投稿アプリの作成が主でした。
deviseというgemを導入し、新規登録、ログイン、ログアウト機能を実装し、
そこから、投稿、編集、削除といった機能を学んできました。今月2ヶ月目では、4人でのチーム開発を体験しました。railsで、ECサイトの制作なのですが難しかったです。何が難しかったかと言いますと、githubですね。
コミュニケーションでお互いの進捗を確認し、コンフリクトが起きないようにしていました。
それと、マージ先。作業ブランチなど。
チーム開発においての、gitを理解するまで1日を費やしました。今もまだ完全な理解は遠く及んでいませんけど。メンバー同士で話し合い、プルリクからマージをするように決めました(慣れていないので)
ma
Rails×MySQL dockerで開発環境を構築する
# 今回指定したバージョン
– Rails version 6.1.7.1
– Ruby version 2.7.7
– MySQLは最新version
– nodejsは互換性のある version16
# 条件
– docker-compose upでrails serverを起動できるようにすること
– ホストのファイルシステムとコンテナのファイルシステムを同期させること## Dockerfile
– まずは、apt-getでyarnを入れたもの
“`
# Node.js & Yarn
FROM node:16-buster-slim
RUN yarn installFROM ruby:2.7.7
RUN apt-get update
RUN apt-get install -y \
build-essential \
libpq-dev \
nodejs \
default-mysql-client \
yarn
default-mysql-clientWORKDIR /rails-docker-mysql
COP