[Rails]よく使うバリデーションまとめ
バリデーション機能は、空で保存してほしくないときや、文字数は10文字以内にしてほしいときなどに、チェックする機能として動きます。
たとえば、インスタグラムのような画像投稿サイトで、画像がないのは望ましくないので、画像は空白では保存できないようにします。
Twiiterのようなテキスト型の投稿サイトなら文字数は140字以内に設定します。このようにバリデーション機能は、開発者の思うようなアプリ運営を行っていく上で非常に重要な機能です。
Railsではバリデーションをかんたんに実装できるので、今回はよく使うバリデーションの例を実装していきます。
#開発環境
> ruby 2.6.3
> Rails 5.2.6#発動タイミング
バリデーションは、オブジェクトがデータベースに保存される前に発動して、データが正しいかどうかを確認します。
発動するメソッドは以下です
– create
– create!
– save
– save!
– update
– update!#基本形
バリデーションはモデルでカラムを対象に書いていきます。
なのでカラムごとに自由に条件を設定でき
初学者による復習[エラーを解決しよう]
さて今回も復習も兼ねてアウトプットをしていこうと思う。
今回復習をしていて遭遇したエラーがこちら。
“`
Invalid route name, already in use: ‘root’
“`簡単に説明するとrootが2つ使われていて遷移する際、どっちに遷移して良いか
分からないよ!とエラーが出ているようだ。修正する前の記述がこちら。
“`ruby
Rails.application.routes.draw do
devise_for :users
root to: “rooms#index”
get ‘messages/index’
root to: “messages#index”
resources :users, only: [:edit, :update]
resources :rooms, only: [:new, :create]
end
“`確かにroot toで指定しているパスが2つありそりゃどっちやねんってエラーで怒られるわけだ。
なので遷移させたい方だけ残して
“`ruby
Rails.applicati
Rails APIモード Docker-Compose
“`
$ cd$ mkdir sample_app
$ cd sample_app
“`以下ファイルを用意
Dockerfile
docker-compose.yml
Gemfile
Gemfile.lock
environment.rb以下コマンドを実行
“`
$ docker-compose run web rails new . –force –database=mysql –skip-bundle –api –webpacker
“`以下のコマンドを順に打ちます。
“`
$ docker-compose build$ docker-compose run web yarn install –check-files
$ docker-compose run web rake db:create
$ docker-compose up
“`以下の
“`
http://localhost:3000/
“`
にアクセスします。
Railsでvpc endpointを利用してsesからメールを送信する
#環境
+ Ruby 2.7.2
+ Rails 6.1.3
+ terraform 1.0.2#やりたいこと
+ private subnet内にあるECS fargateからAWS SESを利用してメールを送信する#VPC endpoint
private subnet内にecsインスタンスを作った場合NAT gatwayなどを利用しないとAWS SESに接続できません。ただし、private subnet内にVPC endpointを設置することでAWSサービスとプライベートにアクセスができます。
現状、sesのvpc endpointはses-smtp-endpointのみが対応してます。
#Rails
aws公式でaws-adk-rails gemがありますが、SESとの接続はHTTPSを利用しているのでvpc endpointを利用して接続できません。ですので、VPC endpointを利用してSESからメールを送信するにはaction_mailerのsmtp設定を行うことで通信することができます。“`ruby:config/environment
[MVC]ファイル生成について
# 初めに
不安だったMVCのファイル生成について理解が深まったので、
本記事に簡単にまとめてみました。# MVCとは
`Rails`で登場する
M・・・モデル(データベースと連携する役割)
V・・・ビュー(ブラウザ上の表示画面を作る役割、HTMLも作る)
C・・・コントローラー(アクションを行う。これに尽きると思っています)の総称。
Webアプリケーションの処理の構造を表しています。
*本記事はルーティングのことも記述します。#疑問だったこと
1. それぞれのファイルは`どこに`生成・作成するのか。
1. `どのような種類`ファイルを生成・作成するのか。# 調べた結果
###`どこに`
app→MVCの各ファイル
config→ルーティング・appにアプリに直接関わる記述
・configにアプリのオプションの記述`config`は`設定`という意味で
前述の通り、あくまでオプションの役割であることから、
`ルーティングはMVCには入っていない`と思います。### `どのような種類`
**[モデル]**
テーブルごとに作成する。(例)テーブル[us
◤絶対に失敗しない◢ migrateを辞めてridgepoleを導入する
# 導入のきっかけ
どれだけ緻密にテーブル設計をしても、途中仕様変更や追加要望が入って、初期の見積もりから大幅にテーブル構造が変更されることは目に見えてる。
Railsの場合、スキーマを変更するにはスキーマファイルを追加していかないといけない。
でもスキーマの変更履歴は `git` で追えるし、ぶっちゃけ最新のスキーマが見られればそれで十分なんだよね?ということで無駄にスキーマファイルが増えるのを嫌い、ridgepole導入を決意しました。
めちゃ簡単だよ?♂️# 動作環境
`ruby 3.0.2`
`Rails 6.1.4`
`MySQL 8.0.25`# 導入手順
## 1. ridgepoleをインストール
“`ruby:Gemfile
gem ‘ridgepole’
“`“`shell:terminal
% bundle install
“`Gemfileに `rigepole` を追記し `bundle install`。
これで面倒な `migrate` ではなく `ridgepole` が使用できるようになりました。はやっ。## 2
【Rails】削除機能と削除アラートの表示の方法
####My Profile
プログラミング学習歴②ヶ月目のアカウントです!
プログラミングスクールで学んだ内容や自分が躓いた箇所等のアウトプットの為に発信しています。
また、プログラミング初学者の方にわかりやすく、簡潔にまとめて情報共有できればと考えています。
もし、投稿した記事の中に誤り等ございましたら、コメント欄でご教授いただけると幸いです。#対象者
* 削除機能を作ろうと思っている方
#目的
* 削除機能を押す前に確認を取る
#実際の手順と実例
###1.実際これだけでOK!!コードは以下の通りです。
““
<%= link_to books_path, method: :delete, data: {confirm: "本当に削除しますか?"} %>
““たったこれだけで完成です!
””内にどんな文章入れてもダイアログ表示されますよ!
[Ruby on rails] 新着順に指定件数のみ表示 ランキング
やりたいこと
新着の4件のみを表示させたい
![スクリーンショット 2021-07-17 21.15.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/6a54400d-5c09-edea-35c6-6761477a7e87.png)
コード
“`
def top
@items = Item.order(‘id DESC’).limit(4)
# ASCだと古い順でDESCで新着順です。
end“`
limit()に表示したい件数を記述すれば完成です。
以下のサイトを参考にすれば、いいねランキングとかもできそうです
https://qiita.com/hitochan/items/258215ec62ead338c2eb
[Ruby on rails]kaminariでページネーション ページ毎の表示件数を変える
やりたいこと
ページネーションの追加。
ページによって表示する件数を変えたい。
(ユーザー一覧は1ページ最大10件までで、投稿一覧は15件まで等)![スクリーンショット 2021-07-17 21.06.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/5fd46c18-9e4c-fda4-e0d1-28dfb61985ff.png)
kaminari インストールの説明
その一、 gemfileに以下追記。“`gem ‘kaminari’,’~> 1.2.1’“`
その二、 “`bundle install“`
その三、 “`rails g kaminari:config“`でkaminariの設定ファイルを作成します。
その四、 “`rails g kaminari:views default“`
ページあたりで表示させる件数は、“`config/initializers/kaminari_config.
Rails tutorial 2週目の手引き (Docker-compose ,vscode , RSpec, heroku, circleCI)
# 想定する読者
Ruby on Railsの初学者で、Railsチュートリアルの次に何をしようかと悩んでいる方
(Railsチュートリアルをベースに開発現場で使われている技術を取り入れた学習をしたい方)。### (参考情報)私の学習計画と現状について
私は、現在ある事情から離職をし、
未経験からWEBエンジニアになるべく独学をしています。学習ロードマップは以下の通りです
#### これまでの経過 ※現在独学から4か月経過
・HMTL / CSS / Javascriptをprogateとドットインストールで学習
・基本情報技術者試験に無事合格
・jQuery / git / command line / sassをprogateで学習
・いくつかの静的サイト(モーダルやハンバーガーメニュー含む)の作成
・Ruby / Railsをprogateで学習
・Railsチュートリアル(cloud9環境で)を1週。#### これからの予定
・Railsチュートリアルをもう1週。 (←本記事はここです!)
・reactの学習
・Tech PitでRails + Reactのアプ
[Ruby on rails]フラッシュメッセージ&エラーメッセージ Bootstrap バリデーション
やりたいこと
①投稿完了後の成功メッセージ(フラッシュメッセージ)
![スクリーンショット 2021-07-17 20.33.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/d4bf36df-a792-1b34-f05a-71585556443c.png)
②投稿ができなかった時のエラーメッセージ
![スクリーンショット 2021-07-17 17.32.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/3e2cade9-67ab-2fc0-22cf-2abfa5b4a06f.png)フラッシュメッセージの実装
“`
def create
@item=Item.new(item_params)
if @item.save
redirect_to admin_item_path(@item), notice:”
Railsで架空のCafeのHPを作ってみよう!【7日目】『クォーテーションの違い』編
#概要
基本Railsの記法に則り書いていきます!
1から全ての説明ではなく
その中であれ?どうやるの?と
疑問に思った点や実装に困った箇所を
ピックアップして紹介していきます♩#設定と準備
・Rails
・HTML
・CSS
・Javascript(jQuery)↑上記の言語とフレームワークを使い
架空(自分で考えたテキトーなもの)のCafeの
HPを作っていこうと思います!#7日目の作業内容:round_pushpin:
・テーブルの追加とそれに伴うコントローラーの作成#7日目の気になった箇所:zap:
“`index.html.erb
<%= '#{@sample.name}さん' >
“`
書き方合ってるはずなのになんで全部文字列判定されるの???#仮説:pushpin:
書き方自体に問題はないので他に問題がある。#結論:star:
シングルクォーテーションで囲っていたから!
railsで、自分で定義したインスタンス変数などをビューで使う場合“`index.html.erb
<%= "#{@sample.name}さん" >
“`
このように
初学者による復習[ロールバックで修正しよう!]
今回はカラムを修正したい時と方法を復習も踏まえ記述していこうと思う。
**そもそもカラムとはなんぞや**
カラムとはデータベースに入っているデータの項目のこと。
例えば名前、メールアドレスなど。マイグレーションファイルにカラムを記述しターミナルで
“`
rails db:migrate
“`のコマンドを実行するとテーブルが作られてしまい記述を削除するだけでは
データベースのデータからは削除できない。なのでターミナルで
“`
rails db:rollback
“`を実行するとデータベースのカラムを削除することができる!
その後、変更したいカラム名を記述し“`
rails db:migrate
“`を再度実行すると新しいカラムに上書きできる。
bin/rails s でサーバーは走るが、ブラウザが表示されない。
書籍をもとにDocker上にてアプリを作成中。前回webコンテナからログアウトし、2日ぶりにログインし、サーバーを立ち上げることに。
“`
$ bin/rails s
“`上記のコマンドを入力してサーバーは立ち上がりますが、ブラウザが表示されません。
書籍を確認し下記のコマンドを入力。
“`
$ bin/rails s -b 0.0.0.0
“`-b以降のIPアドレスを指定するのを忘れていました。 -b 0.0.0.0を指定する事により、すべてのIPアドレスに応答するようになります。
無事にブラウザが表示されました。
RailsのN+1対策ガイド
Railsでコードを書く人のために、N+1対策で重要な知識と考え方を簡単にまとめました。
[bullet](https://github.com/flyerhzm/bullet)を入れいていたのにスロークエリで障害発生、ということにならないように、知っておくべき知識かと思います。
内容に関してご意見やご指摘がありましたらコメントいただければ幸いです。## 0. 目次
個人的に重要だと思う2点を挙げます。
[1. eager_load, preload を使い分ける](https://qiita.com/yokoto/items/983c1a63424915dcc34a#1-eager_load-preload-%E3%82%92%E4%BD%BF%E3%81%84%E5%88%86%E3%81%91%E3%82%8B)
[2. 計算ロジックによるN+1の発生](https://qiita.com/yokoto/items/983c1a63424915dcc34a#2-%E8%A8%88%E7%AE%97%E3%83%AD%E3%82%B8%E3%83%83%E3%82%AF%E
deviseを使ったtwitter認証でコケた話
## 環境
– ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [arm64-darwin20]
– Rails 6.1.4## 内容
[[*Rails*] deviseの使い方(rails6版)](https://qiita.com/cigalecigales/items/16ce0a9a7e79b9c3974e)の記事を参考にdeviseを実装していたところTwitterで認証するところでコケた。“`console:terminal
D, [2021-07-17T13:20:36.167758 #35278] DEBUG — omniauth: (twitter) Request phase initiated.
W, [2021-07-17T13:20:36.168254 #35278] WARN — omniauth: Attack prevented by OmniAuth::AuthenticityTokenProtection
E, [2021-07-17T13:20:36.168409 #35278] ERR
【rails】update_attributes→updateを使う
##環境
Rails 6.1.4##記事を書いた理由
webアプリを作成中、>undefined method `update_attributes’
というエラーが出てきてしまい、あたふたしてしまったため。
同じように困ってる人の助けになればと思い書きました。##解決策
タイトルの通り、update_attributesをupdateに変更するだけ。
update_attributesはrails6.1から削除されたそうです。参考にさせていただいた記事▼
https://github.com/rails/rails/commit/5645149d3a27054450bd1130ff5715504638a5f5
https://railsguides.jp/6_0_release_notes.html#active-record-%E9%9D%9E%E6%8E%A8%E5%A5%A8%E5%8C%96
##(蛇足)そもそも(元)updateとは何なのか?
私は初学者なので、まずこれは何のメソッドなの
COSMOSDBでこういうことでけた
https://github.com/JFLABO/SuperHiSystem/blob/main/%E6%96%B0%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%E6%BC%94%E7%AE%97%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0COSMOSDB.pdf
抱えていた課題
急に言われて時間があまりなかった
・現職の関係者数が30まんにんもいた・いっぱいいろいろやりたがった
・一人で抱えてはいけないと本能的に感じた
・30万人が毎日生成するのアクティビティーログを適切に取り扱う必要があった
・そうだ地球上に記録して あとでどうにでもできる策略を使おうと思いついた
・どんなデータが入ってくるかわからなかった 変わるかも?!
・急に項目を追加したくなることがあるかも
・夜安心して眠れる仕組みにしたかった
・明らかな異常はAzureAIが検出してくれる仕掛けにしてみた
スキーマレスのCOSMOSDBにとりあえず書いておくことにした
Azureベースのお任せ管理システムの検証報告書が来た
関係者がいっぱ
[Rails] Herokuにアプリをデプロイする
##はじめに
今回はHerokuにRailsアプリケーションをデプロイする方法を記事に残しておきたいと思います。
よろしくお願いします。##Heroku
Herokuはアプリの公開、運用をするために用いられるサーバー提供をするサービスです。
デプロイの手間が比較的簡単で、無料なので使用されている方々が多いかと思います。早速、はじめていきます。
HerokuのデフォルトのデータベースはPostgreSQLですが、私はMySQLを利用しています。
一応、データベースの変更方法も記載しています。#Heroku CLIをインストール
まずはターミナルでherokuのコマンドが使えるようにHeroku CLIをインストールします。
ターミナルで下記のコマンドを実行します。“`terminal:ターミナル
% brew tap heroku/brew && brew install heroku
“`その後、“`heroku –version“`コマンドを実行するとバージョンが表示されます。
もし表示されなかった場合、インストールできていません。##Hero
Rails6でSNS認証を実装しよう!連携後に本登録ページに遷移!
# はじめに
SNS認証のQiitaの記事は多く存在をしているのですが、SNS認証してそのまま登録完了という流れの記事しか見当たりませんでした。そこで、利用規約や名前をを確認する本登録ページを設けるための記事を書きました。
こちらの記事はgemのDeviseに付け加えていき実装していきます。SNS認証=>本登録ページ=>登録完了=>自動でログインしてリダイレクト
上記の流れをつくっていきます。
# DeviseにOmniAuthを導入しよう
### 1. Gemを追加
“`ruby:Gemfile.rb
gem ‘omniauth’
gem ‘omniauth-facebook’
gem ‘omniauth-google-oauth2’
“`### 2. credentialsにIDとシークレットを追加
“`credentials.yml.enc
facebook:
client_id: <クライアントID>
client_secret: <クライアントシークレット>google:
client_id: <クライアントID>