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

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

【Rails】便利な正規表現まとめ

オリジナルアプリ作成にあたり使用した正規表現を、備忘録としてアウトプットします。

#英数字混合
※大文字・小文字の区別なし

“`
/\A(?=.*?[a-z])(?=.*?\d)[a-z\d]+\z/i
“`

#半角数字のみ

“`
/\A[0-9]+\z/
“`

# 全角(漢字・ひらがな・カタカナ)

“`
/\A[ぁ-んァ-ヶ一-龥々ー]+\z/
“`
・`ァ-ン`ではなく`ァ-ヶ`としているのは`ヴ、ヵ、ヶ`を含めるため。
・`一-龥`ではなく`一-龥々`としているのは`々`を含めるため。
・末尾に`ー`があるのは「ジュリー」「メアリー」などのハイフンを含めるため。

# 全角(カタカナのみ)

“`
/\A[ァ-ヶー]+\z/
“`

#電話番号10桁以上11桁以下(ハイフンなし)

“`
/\A[0-9]{10,11}+\z/
“`

#郵便番号(ハイフンあり)

“`
/\A\d{3}[-]\d{4}\z/
“`

#今回登場した正規表現のパターン表記一覧

`[a-z]`: 角括弧で囲まれた文字のいずれか 1個にマッチ
`\d`:数字にマッ

元記事を表示

[Rails]非同期(Ajax)でのコメント機能実装

## この記事の目的
非同期処理(ajax)でのコメント投稿機能を学んだのでアウトプットします
## 目標
[![Image from Gyazo](https://i.gyazo.com/13b13c9847585f462000a341b671e8b8.gif)](https://gyazo.com/13b13c9847585f462000a341b671e8b8)
## 要件
コメント投稿は非同期で行う
## 環境
・Ruby 2.7.1

・Rails 5.2.6
## 前提
・UserとPostは作成済み

・bootstrapとjquery-railsが入っている

## 設計
ER図
[![Image from Gyazo](https://i.gyazo.com/919c4a7bc8f4e5e4c7ff50fb2efcdab1.png)](https://gyazo.com/919c4a7bc8f4e5e4c7ff50fb2efcdab1)

ルーティング

“`
POST /posts/:post_id/comments comments#creat

元記事を表示

git push heroku masterが失敗する

#書いた理由
備忘メモ

#起こったこと

rails tutorialを第3章を進める過程で
`git push heroku master`
を実行したとき、コケた

“`
remote: We will use “yarn” to install the CLI via “yarn add -D webpack-cli”.
remote: Do you want to install ‘webpack-cli’ (yes/no):
remote:
remote: !
remote: ! Precompiling assets failed.
remote: !
remote: ! Push rejected, failed to compile Ruby app.
remote:
remote: ! Push failed
“`

#解決したこと
webpack-cliを再インストールしたり、webpackを再インストールした上で、
最終的に再度以下を実行したらできた
`git commit -am “hog

元記事を表示

#1.5 ユーザー編集機能

#はじめに
自己学習復習シリーズの#1.5になります。
自己学習の為に記事作成しております。
この記事が誰か1人の役に立ったら幸いです。
今回はユーザー編集機能編です。

##ユーザー編集機能作成においてすべき事
– users controllerにてeditアクション、updateアクションの作成&ストロングパラメーターの作成
– routes.rbにてルーティングの作成
– views/usersにedit.html.erbを作成し、編集フォームを作成
– マイページや編集ページに遷移できるようにリンクを作成する

以上の4点を行えば、ユーザー編集機能の実装を終える事ができる。

今回は丁寧に、
(1)ルーティングの作成(editとupdate/routes.rbにて)。
(2)editアクションの記述(users controllerにて)。
(3)edit.html.erbにて編集フォームを作成。
(4)updateアクションの記述(users controllerにて)&ストロングパラメーターの作成。
(5)マイページと編集ページにリンク作成。
の順で説明していきます!

元記事を表示

AWS、EC2でrailsアプリをssl化する!【2021最新版】

まずは参考URLを先に貼り付けておきます。これらを参考にすればうまいことssl化が出来ます!

https://qiita.com/Yuki_Nagaoka/items/1f0b814e52e603613556

https://qiita.com/Yuki_Nagaoka/items/55ed1610cfc1f59398b1

https://dev.classmethod.jp/articles/alb-redirects/

はっきり申し上げます。僕ssl化するだけなのに6時間以上悪戦苦闘しました。
と言うのも、AWSのロードバランサー、ターゲットグループの設定が既存の記事とやることは一緒でも、異なる仕様に変わってしまっているからでした。
なので複数の記事を参考にしてまとめたものをアウトプットしていきます!

# 前提条件
すでに(http://ドメイン名)でデプロイ済み

# ssl化の手順の確認
* ACMの設定
* TGの設定
* ELBの設定
* セキュリティグループの設定
* Route53の設定
* リダイレクト処理

# ACMの設定
AWSではELB(後で設定しま

元記事を表示

Everyda Rails 備忘録

Everyda Rails- RSpecによるRailsテスト入門の重要な部分を備忘録としてまとめていく。
rspecの書き方だけではなく、どういう状況に対してテストを書くべきかというテストケースについてもまとめていく。

# テスト全般で使える技法、慣行

“`ruby
describe User do
# 姓、名、メール、パスワードがあれば有効な状態であること
it “is valid with a first name, last name, email, and password”
# 名がなければ無効な状態であること
it “is invalid without a first name”
# 姓がなければ無効な状態であること
it “is invalid without a last name”
# メールアドレスがなければ無効な状態であること
it “is invalid without an email address”
# 重複したメールアドレスなら無効な状態であること
it “is invalid with a duplic

元記事を表示

AWS メモリ不足時のEBSボリュームのファイルシステムを拡張

# はじめに
Capistorano を使った自動デプロイの実装中、
”bundle exec cap production deploy”を実行すると悲惨なエラーが起こりました。
一瞬、「不能」が「無能」に見えて心が折れそうでした。

“`:
(中略)
ar: vendor: mkdir 不能: No space left on device
DEBUG [7d5bfec5] tar: vendor/bundle/ruby/2.6.0/gems/websocket-extensions-0.1.5/README.md: open 不能: No such file or directory
tar: vendor: mkdir 不能: No space left on device
tar: vendor/bundle/ruby/2.6.0/gems/websocket-extensions-0.1.5/lib: mkdir 不能: No such file or directory
tar: vendor: mkdir 不能: No space left on device
t

元記事を表示

rails 7.0で`Enumerable.sum`を使用した時に発生するdeprecated warning (Rails 7.0 has deprecated Enumerable.sum in favor of Ruby’s native implementation available since 2.4.)について

rails 7.0では数値以外のArrrayで第一引数を指定せずに`Enumerable.sum`を使用していた場合に以下のdeprecated warningが発生します。

“`
Rails 7.0 has deprecated Enumerable.sum in favor of Ruby’s native implementation available since 2.4.
Sum of non-numeric elements requires an initial argument.
“`

# 理由

rails 7.1からrails実装の`Enumerable.sum`がなくなりrubyの`Enumerable.sum`を呼び出すようになる為、数値以外のArrayに対し`sum`メソッドを呼び出す場合には第一引数が必須となります。

# 詳細
rubyの`Enumerable.sum`は第一引数に対して`+`メソッドを実行します。
この第一引数のデフォルトが`0`なので数値の場合はそのまま処理ができますが例えば文字列の場合は`0`に対して`String`を`+

元記事を表示

Railsランキング機能(同率含む)

Railsでレビュー評価に基づくランキング機能の実装方法です。ランキングの作り方は他にも記事が出ていますが、同率(例えば1位が2つ合った場合、次が3位になる)の実装方法の記事はあまり見られなかったので、記事を残したいと思います。

**条件**

– 投稿(post)の評価(1~5)の平均に応じた降順のランキング
– Userモデル,Postモデル(投稿)が多対多の関係であり、中間テーブルのReview(口コミ)モデルが存在する
– ルーティングは任意

**STEP1**
任意のコントローラーにアクションを作ります。今回は`ranking`にしました。アクション内で評価に基づくデータの所得のコードを記入します。また、Reviewモデルの対象カラムは`rate`です。取得したデータを`@rank`に格納します。
データの取得方法ですが2つあります。

**ActiveRecordのメソッドを利用する場合**

“`
@ranks=Post.find(Review.group(:post_id).order(‘avg(rate) desc’).pluck(:post_id))
“`

元記事を表示

【Rails】100均商品レビューアプリの製作者解説

##アプリ概要
![hundredapp2_top.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599449/1c02ec4f-d840-8c36-4c68-de75420c8f17.gif)
100円ショップ(通称100均)の商品情報を投稿し、共有出来るサイトです。

– 商品画像、星評価による5段階評価、購入ショップなどの情報が投稿出来ます。
– ユーザー登録はもちろん、ユーザー登録をせず、ゲストログインで使用することも出来ます。
– マイページでは自分の投稿、コメントした投稿、今後購入したい商品の買い物リストが見れます。
– その他ランキング機能、Google Mapを利用したショップ検索などが利用出来ます。

下記ページで公開中です。
https://hundred-100.net
##制作背景
今回このアプリを作るに至った理由は主に
**1、個人的に100円ショップをよく利用する。****2、100円ショップに焦点を当てたサイトがあれば買い物するときに楽だと思った。****3、100円シ

元記事を表示

コントローラーを作成・削除

#①.コントローラーを作成!

ターミナルでコントローラーを作成する際のコマンドです!

コントローラーを作成する時は、命名を複数形にしましょう!

コマンドは下記の通りです!

“`php
# コントローラーを作成
% rails g controller コントローラー名
“`

例えばコントローラー名をeatsにすると、下記ののようになります!

“`php
% rails g controller eats
“`

正しく作成できれば以下の様な出力結果が表示されます!

“`php
# ターミナル:例

create app/controllers/eats_controller.rb
invoke erb
create app/views/eats
invoke test_unit
create test/controllers/eats_controller_test.rb
invoke helper
create app/helpers/eats_helper.r

元記事を表示

MacでImageMagickインストール後にbundle installを実行するとエラー(No such file or directory)

# 概要
画像を読むこむアプリケーションを作成しようとして、ImageMagickを導入した。
その後、Gemfileで「mini_magick」などを追記して「bundle install」を実行したところ
No such file or directoryとなってしまった。

# 事象

① まず、ImageMagickをHomebrewでインストールする。

“`shell:Macターミナル
username@MacBookAir ~ % brew install imagemagick
Updating Homebrew…
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> New Formulae
aws-sso-util git-cliff libavif python-tk@3.10
ca-certificates git-credential-libsecret

元記事を表示

【Rspecエラー】HTTP Basic: Access denied

##環境
Ruby 3.0.2
Rails 6.1.4.1

##状況
Rspec実行時、401エラーが出た

“`
Failure/Error: expect(response).to have_http_status(200)
expected the response to have status code 200 but it was 401
“`

##解決法

responseの中身を確認

“`
> response.body
=> “HTTP Basic: Access denied.\n”
“`

Basic認証を採用していたことを思い出したので、テスト環境ではBasic認証をしないように指定

“`app/controllers/application_controller.rb
class ApplicationController < ActionController::Base before_action :basic_auth unless Rails.env.test? def basic_auth ...

元記事を表示

RailsにgemでBootstrapを導入する

#はじめに
現在プログラミング学習を始めて3ヶ月目の初学者です。
学んだことをqiitaに投稿という形でアウトプットするため、また備忘録として記事を作成しました。

###1.Gemfileを編集する
gem ‘bootstrap’, ‘~> 4.5’

###2.bootstrapファイルを読み込む

app/assets/stylesheetsの「application.css」を「application.scss」に変更

###3.BootstrapをSCSSに読み込ませる

app/assets/stylesheets/application.scss

@import “bootstrap”;

###4.application.jsファイルを編集する

app/assets/javascripts/application.js

//= require jquery3
//= require popper
//= require bootstrap-sprockets←追加
//= require rails-ujs
//= require activestorage
/

元記事を表示

保存済みのマイグレーションファイルを削除する方法

こんにちは!テックアカデミーのWebアプリコースを受講している駆け出し高校生エンジニアの安田駿介です。

今回は、「保存済みのマイグレーションファイルを削除する方法」というテーマで解説していきます。

#保存済みのマイグレーションファイルを削除する手順
1.rails db:migrate:status
2.rails db:rollback
3.rails db:migrate:status
4.マイグレーションファイルを削除

という手順です。

#解説
##1.rails db:migrate:status
これは、マイグレーションファイルの状態を確認するコードです。
![9b784c91b77cad3247c4526ad0c8b9c9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1903726/a84f3290-b33a-1e46-2c18-5694a2ef0c77.png)
Statusがupになっているのは、保存済みということです。

##2.rails db:rollback
次に、マイ

元記事を表示

no such column エラー

#ビューでタスク一覧を開こうとしたところ以下のエラーが発生した。

“`:エラー文
ActionView::Template::Error (SQLite3::SQLException: no such column: tasks.user_id: SELECT “tasks”.* FROM “tasks” WHERE “tasks”.”user_id” = ? ORDER BY “tasks”.”created_at” DESC):
11: th= Task.human_attribute_name(:created_at)
12: th
13: tbody
14: – @tasks.each do |task|
15: tr
16: td= link_to task.name, task
17: td= task.created_at

app/views/tasks/index.html.slim:14:in `_app_vi

元記事を表示

[Rails] 通知機能

DMが来た時、いいねされた時に通知が来る通知機能を実装した時のメモです。
DMといいね機能は既に実装済みとします。

DMの実装は以下の記事を参考にしてください。

https://qiita.com/aaaasahi_17/items/9e7f344488c720aaf116

# 実装

## ① モデルの作成
通知モデルを作成します。

“`terminal:ターミナル
$ rails g model Notification
“`

以下を記述してmigrate。
`action`にはいいねかDMどっちの通知なのかが入ります。
`checked`には通知が既読済みかどうかの部分です。

`add_index`を使用すると検索が早く行われるらしいです。

“`ruby:db/migrate/20210712225000_create_notifications.rb
class CreateNotifications < ActiveRecord::Migration[6.1] def change create_table :notifications do

元記事を表示

[Rails] ソート機能

ポートフォリオにソート機能を実装した時のメモ。

# 完成イメージ
![ezgif.com-gif-maker (5).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974719/a33e6b86-d9e2-2d17-5a23-def4229c24f2.gif)

# 実装と解説
今回実装したのは投稿されたイベントを新着順、古い順、イベントの参加者数順に並び替える機能です。

### ① ルーティングの定義

`example.com/?sort_new` → 新しい順に並び替え のように、
パラメーターの変更で並び替えできるようにルーティングを変更していきます。

“`ruby:congig/routes.rb
get ‘events/search/sort_new’, to: ‘events#search’, as: ‘sort_new’
get ‘events/search/sort_old’, to: ‘events#search’, as: ‘sort_old’
get ‘events/se

元記事を表示

【DB】なぜ一意制約が必要か

##概要
####一意制約 (UNIQUE制約)
RDBでテーブルにデータを追加、更新する際の制約の一つで、その列の中でデータが一意(他と重複しない)でなければならないという制約。
重複したデータを入力しようとすると、DBMSによって拒否されエラーとなる。
Nullの制約は認められる。

これがなぜ必要なのかのメモ。

###なぜ必要か
データを取得する際に一意制約がないと、重複した必要のないデータまで取得してきてしまう可能性がある。
これを防ぐために、入力の段階から重複を許さない為のもの。

###同姓同名の場合は?
生徒に出席番号がついているように、、順番があり重複の要因のないもので識別してあげることができる。
ex) 出席番号、ID、背番号など。
さらに、出席番号を指定するとその生徒の情報(名前、性別、年齢、クラスなど)が芋蔓式で出てくるようにする。この時の出席番号をPK(primary key)と言う。
このPKを用いて同姓同名の生徒でも一意、個別に指定できる。
また、クラス内だけでなく学級、学年など、他の関連したテーブルとデータを結ぶ必要がある。今回はクラスがそれに当たる。こ

元記事を表示

Rails Twitter API を使用してツイートを取得する方法 (特定のアカウントのツイートの検索も)

# 目標
Twitter APIを使用して特定のアカウントのツイートを取得しDBに保存したい。
また取得したツイートの中に、特定のタグをが含まれているツイートのみを取得することを条件とする

# 前提
Rails 5.2.6
ruby 2.6.6
Article model作成済み
Articleのインスタンスにツイートの内容を格納させて保存したい

# Twitter APIとは
>TwitterのAPIプラットフォームは、プロバイダユーザーが世界で共有する設定にしている一般のTwitterデータへの広範囲でのアクセスを提供します。APIによってユーザーが非公開のTwitter情報(ダイレクトメッセージなど)を管理できるようにし、またこの情報を、許可した開発者に提供するようにもします。

詳しくは [TwitterAPI](https://help.twitter.com/ja/rules-and-policies/twitter-api)

# Twitterアカウント申請
私の場合、1日で承認された!
長くなるので参考にさせていただいたサイトはこちら
[Twitter API

元記事を表示

OTHERカテゴリの最新記事