- 1. 【Rails】 退会機能を論理削除で実装する
- 2. Railsでメモアプリを作る(入門)
- 3. 【Rails環境構築】Docker + Rails + Mysql
- 4. ページを戻すとき
- 5. CSSで画面サイズを小さくすると、レイアウト崩れる問題
- 6. [ERROR rubocop] Layout/TrailingEmptyLines: Final newline missing.
- 7. AWS デプロイ時のエラー対応
- 8. Jenkinsの代わりにCircleCIを導入したい
- 9. [Docker]サーバー接続やコンテナ起動が遅いので、軽量化したい
- 10. [Rails][Mysql] いまさらだがポートフォリオにDockerを導入したので、コマンドをまとめる[備忘録]
- 11. 【Rails】Slackに通知する方法
- 12. 【Rails バリデーション基礎(小学生でも分かる解説)】
- 13. クラスとインスタンス②
- 14. Railsでfields_forとaccepts_nested_attributes_forを使ってhas_oneで関連付けしたネストしたフォームを作る
- 15. Railsチュートリアル9章まとめ
- 16. RailsをAWS上への構築におけるAWSの基礎についてまとめてみました
- 17. Dockerを利用してnginxをrailsプロジェクトへの導入手順をまとめてみました
- 18. Dockerを利用してのrails6.0.3.4開発環境の構築手順をまとめてみました
- 19. Rails開発環境構築におけるDockerの使い方の基礎をまとめてみました
- 20. フォームオブジェクトを使って1つのフォームから複数のテーブルにデータを保存する
【Rails】 退会機能を論理削除で実装する
はじめに
—
gemのdeviseを使用したユーザー機能に論理削除を実装したので、自身の備忘録として、また今後実装を考えておられる方の参考になればと思い投稿させていただいております。(参考サイト)
・[Rails]paranoiaを使わずに退会機能を実装する(ユーザーを論理削除する)
https://qiita.com/yuto_1014/items/358d0a425193b12c969a
論理削除と物理削除について
—
今回は、ユーザー機能に論理削除を実装しましたので、こちらを例にご説明致します。
####●論理削除とは…
退会処理が行われるとユーザーはアカウントを使用できなくなります。
ただし、データ自体は記憶媒体(データベース)には存在します。#####メリット
ー 誤って削除をしてしまった場合でも、データを復旧することができる。
ー 削除したデータも検索等で参照できる。#####デメリット
ー データ量が膨大になり、データベースの容量の圧迫する可能性がある。
(結果として、コストパフォーマンスを損なう可能性にも繋がる。)—
###
Railsでメモアプリを作る(入門)
# ここで使用している環境
OS: `Windows10`
IDE: `RubyMine 2020.2.3`
Rails: `6.1.0`“`shell:Ruby
> C:\\Ruby30\\bin\\ruby.exe -v
ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [i386-mingw32]
“`# 注意
– 一部、分かりやすくするために冗長な説明をしている箇所があります。
– `アクション`を`関数`と呼んでいます。
– IDEにRubyMineを使用することを前提としています。※ただし、やっていることは他エディタ/IDEでも同じなので参考にはなるかもしれません。
以上の点について、ご理解ください。
# プロジェクト作成
1. `New Project`画面を開く
2. `Rails`->`Application`を選択
3. `Location`に好きなディレクトリ(プロジェクト名になる)を指定
4. `Ruby SDK`で使用するRubyを選択
5. `Rails Version`でRailsバージョンを
【Rails環境構築】Docker + Rails + Mysql
#本記事の目的
**DockerでRuby on Railsの環境構築(Mysql)**を行うことです。
DBにMysqlを使ったDockerの構築記事が少なかったため、備忘録も兼ねて投稿します。#参考記事
https://qiita.com/kodai_0122/items/795438d738386c2c1966#1. 開発用フォルダを用意する。
まず、ローカルでアプリ開発用のフォルダを作成します。
私の場合は *desktop/Docker/test_app* で作りました。フォルダ名はなんでもOKです。cdコマンドで、作業フォルダへ移動します。
“`
$ cd test_app
“`#2. 必要なファイルを用意する。
1で作成したフォルダ内に以下のファイルを作成します。“`
$ touch Dockerfile
$ touch Gemfile
$ touch Gemfile.lock
$ touch entrypoint.sh
$ touch docker-compose.yml
“`では、ファイルにコードをコピペしていきましょう。
ページを戻すとき
# こんな発見が!
些細な発見ですが、link_toメソッドでリンク先を**:back** に指定してあげると「ページに戻る」ことができます。
例として、railsの編集機能で編集せずに戻りたい時に使えます!“`edit.html.erb
<%= link_to "ページに戻る", :back, class: 'btn'%>
“`
CSSで画面サイズを小さくすると、レイアウト崩れる問題
自身の備忘録を書いていきます。
最近cssでレイアウト完成!よしッ!て思って縮小して見たら
すごい勢いで**レイアウトが崩れる**ので
レスポンシブについて少し調べてみた。#解決方法
“`
img.main {
width: ~~ px;
max-width: 100%;
height: auto;
“`
横幅の最大値を合わせる記述の
**max-width: 100%;**
と高さを合わせてくれる
**height: auto;**
の記述をセットで足してあげる。後はレイアウトに合った**width**を決めてあげれば
真ん中をキープしたまま画面縮小できる。
この時、余りmarginで横幅をいじらない方がいいらしい。
paddingで位置調整すると崩れにくいらしい。cssって簡単そうに見えて奥が深くて楽しいです。
[ERROR rubocop] Layout/TrailingEmptyLines: Final newline missing.
`bundle exec rubocop` したら以下のようなエラーが発生しました。
最終改行がありません、というエラーのようです。“`
app/controllers/users_controller.rb:10:4: C: [Correctable] Layout/TrailingEmptyLines: Final newline missing.
“`私の場合 `users_controller.rb` の10行目にエラーが起きています。
最後の `end` の下に改行が必要なので1行改行を入れてあげると解決します。“`
class UsersController < ApplicationController ... end ←ここ ```
AWS デプロイ時のエラー対応
## 前提
自分がAWSへのデプロイ時に遭遇したエラーの備忘録です。
EC2 の作成やRDSの設定などは既に済んでいる
Unicorn と Nginx を起動した時に出たエラーになります。
### エラー内容
production.log“`bash
F, [2021-02-19T00:20:57.099109 #17387] FATAL — : [333532cb-cda3-4d39-9c25-6e18a14a0f6e]
[333532cb-cda3-4d39-9c25-6e18a14a0f6e] ActionView::Template::Error (The asset “application.css” is not present in the asset pipeline.
):
[333532cb-cda3-4d39-9c25-6e18a14a0f6e] 5: <%= csrf_meta_tags %>
[333532cb-cda3-4d39-9c25-6e18a14a0f6e] 6: <%= csp_meta_tag %>
[
Jenkinsの代わりにCircleCIを導入したい
仕事でJenkinsが上手く動けないので、チームの皆さんは最近大変CI/CDのことを悩んでいます。
# 背景
所属するチームでJenkinsを使ってCI/CDを取り込んでいます。最近業務の量が大きくなったので、PRの数も大変増えて来ました。その故に、Jenkinsの負担も結構重くなりまして、下記の問題が行っています。
1. CIが重いので、単体テストは走れない状態で失敗になりました。
2. PRのレビューやマージすることが一旦止まれてしまう。
3. CDも影響されまして、デポロイも失敗になりました。そして、最近ではなくて、いつでも存在している問題もあります。
1. CI結果は見辛い。コケっている原因を調べる際に、まずJenkinsをログインして、後はタスクを探して、その「**console出力ログ**」をちゃんと観ないと原因が分からない。
2. 今回のCI結果が後のタスクで被られる。CI結果を早く見ないと消えるの大変困っています。
3. 改修はややこしい。Jenkinsの改修はインフラの方を頼まなければならない。CIはそもそも開発を上手く進めていくツールと思うので、開発チームが
[Docker]サーバー接続やコンテナ起動が遅いので、軽量化したい
#はじめに
**前提**:以下の記事どおりに環境構築をしてポートフォリオアプリを作成中です
>[[Docker] Ruby2.7.2 / Rails6.0.3 / MySQL8.0の開発環境構築できたメモ](https://qiita.com/ayalikesweb/items/4167c8a8e40441b10cfe)
**サーバー接続時**や、**コンテナ起動時**に時間を要しすぎる状況だったので、
改善のためにMac、Dockerに対して試してみたことを記します。(自分用メモ)– 「そもそも環境構築が原因だよ!」
– 「ここも確認しておきなよ!」そんなご意見ありましたら、教えていただけると幸いです。
#結論 「試したこと」
– PC **再起動**
– 不要なディレクトリを **docker volume** から外す
– 不要な **dockerコンテナ** や **ボリューム** を削除する!
– **初期データ変更**時は、変更部分のみDB反映させる#環境
– macOS Catalina
– Docker version 20.10.2
– doc
[Rails][Mysql] いまさらだがポートフォリオにDockerを導入したので、コマンドをまとめる[備忘録]
# 導入理由
・祝日で就職活動が進まないので時間があった。
・Dockerの導入自体が現在のデファクトスタンダード(事実上の基準)であるから。
・今後もポートフォリオを改善する予定があるから。# この記事に関して
記事にしておくことで、脳に焼き付けたいという完全なるワガママ投稿ですので、誤認識の点がありましたらぜひ教えてください。# 頻出コマンド一覧
| dockerコマンド | 処理 |
| :— | —: |
| docker run|イメージ、コンテナを生成し、起動|
|docker start| コンテナを起動|
|docker stop | コンテナを停止|
|docker ps|起動中のコンテナを確認|
|docker ps -a|コンテナの一覧を表示|
|docker images|イメージの一覧を表示|
|docker rm|コンテナを削除|
|docker rmi|イメージを削除|
|docker build|dockerfileからイメージを作成|
|docker exec ~ bash|~コンテナにログイン|
|docker
【Rails】Slackに通知する方法
## はじめに
初学者向けです。
今回は[Slack Webhook](https://slack.com/intl/ja-jp/help/articles/115005265063-Slack-%E3%81%A7%E3%81%AE-Incoming-Webhook-%E3%81%AE%E5%88%A9%E7%94%A8)を利用して、RailsアプリからSlackに通知してみます。
前半ではSlackに通知させる方法を紹介し、後半は簡単なブログアプリを作ってSlack通知を実践してみます。
ほとんどの人は前半のみでOKです。
体験的に学びたい方はぜひ後半もご覧ください。#(前半)Slackに通知させる方法
##必要なGem
“Gemfile“に以下の二つを追記しましょう。“`ruby:Gemfile
gem ‘slack-notifier’
gem ‘dotenv-rails’
“`
“`shell:ターミナル
bundle install
“`
[slack-notifier](https://github.com/stevenosloan/slack-notif
【Rails バリデーション基礎(小学生でも分かる解説)】
#バリデーションとは#
バリデーションとは、
`入力されたものをチェックすること`例えるなら、飛行機に乗る前の荷物検査。
・重量オーバーしてたらダメ
・危ないもの持ってたらダメとか。
プログラミングは、主にログインや登録で使われる。
・入力されていないとダメ
・長いタイトルはダメとか。
#バリデーションの使い方(まずざっくり)#
大きく分けると、この3つを書く。
`①モデルに、バリデーション書く`
`②コントローラに、通った時と通らなかった時の動きを書く`
`③ビューに、通らなかった時のエラーメッセージを書く`
#バリデーションの使い方(具体的)#
先ほどの3つの流れに沿って。
###`①モデルに、バリデーション書く`###
“`models/sample.rb
validates :name, presence: true
(validates :チェックするもの, 何が: どう?)
“`
この場合だと、
「name」を、「存在」が「ある」かどうかチェックする。「name」に何も書いてないとfalse
「name」に何か書いてあるとtr
クラスとインスタンス②
# クラスの中に定義するクラスメソッドとインスタンスメソッド
値を作ることで、現実世界のあらゆる「もの」をコードで表現することが可能
同じ種類でも、その中でそれぞれ個性があるようなものも表現することが出来る>
人間を表現する場合は、属性として身長・性別、動作に食べる・笑うなどをクラスに定義
あとは個別のデータを追加してインスタンスを生成する現実世界の「もの」には、できる動作とできない動作があります。
>
車はアクセルやブレーキを踏むと「加速する」「減速する」という動作が可能
人間のような「食べる」「笑う」という動作は不可能
逆に人間にとってみても車が持つ動作は不可能現実世界の「もの」のように、クラスとインスタンスでデータを作る場合も、
それぞれの動作、つまり`メソッド`をあらかじめ決めておく>
メソッドはクラスに定義しますが、それぞれ
`クラスメソッド`と`インスタンスメソッド`の2種類がある## インスタンスメソッド
インスタンスメソッドは、インスタンスから呼び出すメソッド
`インスタンスごとの個別の情報(属性値)を使った処理に使用`– Carクラス
Railsでfields_forとaccepts_nested_attributes_forを使ってhas_oneで関連付けしたネストしたフォームを作る
#はじめに
has_oneで結んだ親テーブルと子テーブルの値を
1つのフォームで同時に保存する方法を解説!
※has_manyの場合はやり方が少し異なります。ご注意ください。音楽系のアプリを作っていて、
「Youtubeの埋め込みurlを持った子テーブルから
urlを引っ張ってきて投稿の中に表示したい!」と思い、
それを実現すべくネストしたフォームを作る中でかなり苦戦しました…ネストしたフォームを作りたい方はお役に立てるかもしれません。
###環境
Rails 6.0.3.5
ruby 2.7.2#モデル
“`ruby:models/post.rb
belongs_to :user
has_one :portfolio, dependent: :destroy
accepts_nested_attributes_for :portfolio
“`“`ruby:models/portfolio.rb
belongs_to :post
“`
![qiita_image.jpg](https://qiita-image-store.s3.ap-northeas
Railsチュートリアル9章まとめ
#この章でやること
– よくあるチェックボックスをチェックするとずっとログイン状態を保持できる機能(remember me)を実装する##9.1 Remember me 機能
ユーザーのログイン状態をブラウザを閉じた後でも有効にする[remember me]機能を実装する
この機能を使うと、ユーザーがログアウトをしない限り、ログイン状態を維持することができる
また後半では、この機能を使うかどうかをユーザーに決めてもらうため、[remember me]のチェックボックスをログインフォームに追加するまずはトピックブランチを作成し、そこで作業をする
“`
$ git checkout -b advanced-login
“`###9.1.1 記憶トークンと暗号化
8章でsessionメソッドを使ってユーザーIDを保存したが、ブラウザを閉じると消えていた。
9章では、セッションの永続化させるため、記憶トークン(remember token)を生成し、cookiesメソッドによる永続的cookiesの作成や、安全性の高い記憶ダイジェスト(remember digest)による
RailsをAWS上への構築におけるAWSの基礎についてまとめてみました
rails学習のため、herokuではなく、AWS上での構築を試みました。その際に、AWSの基本的なことへの理解を含めて、メモとしてここに残しておきます。
#AWSネットワークの概念
##リージョン
AWSサービスが提供されている地域のこと##VPC
他ネットワークと分離する仮想ネットワーク環境を作成するためのサービス##アベイラビリティゾーン
独立したデータセンターのこと。災害が発生して、一つのデータセンタがダメになっても、サービスが提供し続けるように一つのリージョンの中で最低二つのアベイラビリティゾーンが存在する##サブネット
VPCを細かく区切ったネットワーク。WEBサーバーを公開する、DBサーバーを公開しないなどの目的で使用##VPC、リージョン、アベイラビリティゾーン、サブネットの関係性(ベストプラクティス)
リージョン→VPC→アベイラビリティゾーン→サブネット→AWSサービス(WEBサーバ)→サブネット→AWSサービス(DBサーバ)アベイラビリティゾーン→サブネット→AWSサービス(WEBサーバ)→サブネット→AWSサービス(DBサーバ)
Dockerを利用してnginxをrailsプロジェクトへの導入手順をまとめてみました
railsのアプリケーションサーバpumaではなく、nginxをウエブサーバーとして、導入してみましたので、メモとして、導入手順をここに残しておきました。
#nginx ウェブサーバーの導入手順
##railsのDockerfileを修正
※puma.sockを配置するディレクトリを作成(socketsとはnginxとの通信用)
RUN mkdir -p tmp/sockets
##nginx用のフォルダを新規作成
./containers/nginx/
##nginx用のDockerfileと設定ファイルを格納
./containers/nginx/Dockerfile
./containers/nginx/nginx.conf
##docker-compose.ymlファイルを修正
railsとnginx通信用のフォルダをマウント
nginx起動用のサービスを追加“`docker:Dockerfile
app
build: .
volumes:
– .:/webapp
#nginxとpuma間の通
Dockerを利用してのrails6.0.3.4開発環境の構築手順をまとめてみました
Dockerを利用してのrails6.0.3.4開発環境を構築してみましたので、構築手順をメモとして、ここに残しておきます。
#Dockerを利用してのrails6.0.3.4開発環境の構築手順
・mkdir circle_test:プロジェクトフォルダを作成
・cd circle_test:プロジェクト
・Dockerfile、Docker-compose、Gemfile、Gemfile.lockをフォルダに格納
・docker-compose build:railsをインストール
・docker-compose run web rails new . –force –database=postgresql –skip-bundle:・・railsアプリケーションをセットアップ
・exit:コンテナへの接続を切断
・docker-compose build:railsの関連gemを再インストール
・docker-compose run web rails g scaffold procudct name:string price:string:サンプルコードを作成“`
Rails開発環境構築におけるDockerの使い方の基礎をまとめてみました
Rails学習のため、ローカルmac osで開発環境の構築してみましたが、大変苦労しました。その時、Dockerという技術に出会い、ゼロからDockerを学び、また、Dockerを利用してrails開発環境を構築してみました。まず、ここでは、Dockerの基本的な使い方をメモとして残しておきます。
#Dockerとは
Dockerは一言というと、実行環境、テスト環境、本番環境を簡易に構築できるようにするためのツール#Docker(コンテナ型仮想技術)とVM(ホスト型仮想技術)の主な違い
オーバーヘッドとはコンピュータが処理を行うにあたって、本来の処理とは別に、間接的な処理のこと。
Dockerはホスト型仮想技術と比べると、ゲストOSというオーバヘッドがなくなるというなるのが一番大きな違い#Docker関連コマンド
##イメージの制御コマンド
docker images:イメージ一覧表示
docker inspect イメージ名:imageの情報確認
docker tag 元イメージ名 ターゲットイメージ名:イメージ名前を変更
docker rmi -f:イメージ強制削除
フォームオブジェクトを使って1つのフォームから複数のテーブルにデータを保存する
# 記事の目的
1つのフォームから複数のテーブルに一気にデータを保存し、さらにバリデーションも通過させるようにしたい。
通常であれば、フォーム一つに対しテーブルは一つ(紐づくモデルも一つ)であるため、今回のような実装にはフォームが2つ必要になるが、フォームオブジェクトを使って複数のモデルの処理を一つにまとめることができる。# 現状
モデルは以下のとおり2つ。
こっちは「誰がどの商品を買ったのか」を管理するためのモデル。“`ruby:app/models/order.rb
class Order < ApplicationRecord belongs_to :user belongs_to :item has_one :shipping end ``` データベースは以下のとおり。 ```ruby class CreateOrders < ActiveRecord::Migration[6.0] def change create_table :orders do |t| t.references :user, null: false,