- 1. 【Rails】Controllerの主な仕事内容
- 2. GETとPOSTについて
- 3. 【uniqueness: scopeの使い方】ブックマーク、いいね機能実装に使える
- 4. AWS / CircleCI / Docker を使ったアプリの完成(仮)
- 5. migrationファイルのadd_indexは何なのか
- 6. Vuex(Store)で保存したデータがリロードすると消える
- 7. 【Rails】memberとcollectionの違い
- 8. Rails 7.0でbootstrap-iconsを使う方法
- 9. redirect_toとrenderメソッドの違い
- 10. Railsでログの改行を削除して出力
- 11. [RoR]EasyMDEと非同期で画像をドラッグアンドドロップ?
- 12. 【Rails】マイグレーションを利用したテーブルの作成について
- 13. 【Rails】ActiveRecordの機能について
- 14. 【Rails】「rails console」で書いたコードについて
- 15. 【Rails】「.find」と「.find_by」の違い
- 16. 【Rails】「.new」と「.create」をそれぞれ実行すると…
- 17. $Heroku push rejected due to an unrecognized error; error: failed to push some ref
- 18. Rspecのrequest specにて値の削除や更新、作成などのテストをする際の注意点
- 19. インスタンス変数の簡略化メモ
- 20. 【Rails】redirect_backとは
【Rails】Controllerの主な仕事内容
##Controllerの仕事内容
・Modelとのやり取りを行う。
・Viewに渡すインスタンス変数を定義する。
・表示するViewファイルを指定する。
GETとPOSTについて
##HTTPメソッドが「GET」になるのはどんな時?
・アドレスバーにURLを入力した時。
・google検索で出てきたサイトをクリックした時。##HTTPメソッドが「POST」になるのはどんな時?
・会員登録をする時。
・ブログの投稿を行う時。###GET=サイトの表示を得る(GET)のがGETリクエスト
###POST=データの送信をする(POST)のがPOSTリクエスト
【uniqueness: scopeの使い方】ブックマーク、いいね機能実装に使える
##uniquenessとは
バリデーションの1つ。Railsで一意であることを示す。
“scope“はuniquenessのオプション。下記は人が投稿したものに対してブックマーク(いいね)機能を入れた時のmodel例。
1投稿に対して、1人のユーザーが1ブックマーク(いいね)しかすることができないため、このようなバリデーションになる。“`models/bookmark.rb
class Bookmark < ApplicationRecord belongs_to :user belongs_to :board validates :user_id, uniqueness: { scope: :board_id } end ``` もし``scope``を付与せずにいると、 ```models/bookmark.rb validates :user_id, uniqueness: true ``` 「1投稿」に対して「1ブックマーク(いいね)」しか付けることしか出来ず、**早い者勝ちで一番最初に誰かがブックマーク(いいね)をしたら、それ以上その投稿
AWS / CircleCI / Docker を使ったアプリの完成(仮)
# プロフィール
・実務未経験の27歳
・大学院卒業 〜 現在まで約2年フリーターとして就業中
・週3, 4勤務
・プログラミングスクール卒業生目標にしていたAWS、Docker、CircleCIの導入ができたので一旦これでポートフォリオの完成にしようと思います。インフラの勉強むずい!
# ポートフォリオについて
## はじめに
一般公開しています。何かコメントいただけるととても嬉しいです:smile:
https://www.nitinitikoretanren.net/## 機能一覧
日々の運動習慣を記録できるアプリで、機能は大きく分けて三つあります。1. 運動した時間や走行距離などをグラフとして描画できる機能
2. 基本的なCRUD機能を持つつぶやき投稿(つぶやきの新規作成、編集、削除、一覧表示)
3. つぶやき投稿に対するいいね機能## テストユーザーの使用例
* ランニング → 走行距離・走行時間
* 筋トレ → 筋トレ部位・筋トレ時間上記のように、ユーザーは「ランニング」と「筋トレ」に分けて運動を記録することができます。
それらのデータを使って三種
migrationファイルのadd_indexは何なのか
##add_indexとは
よくマイグレーションファイルに“add_index :~“と記述があるがいまいち何でこれを書いているのか分からなかったので、調べてみた。“add_index:“とは特定のカラムからデータを取得する際に、“テーブルの中の特定のカラムのデータを複製し検索が行いやすいようにする“ための記述。
多くのデータを格納するテーブルの、格納される値がそれぞれ異なるようなカラム(unique制約のかかったカラムなど)の中で、“検索がよく行われるカラム
に対してadd_indexの記述を張ることで検索を簡単にしたいときに使う。“##記入法
“`
add_index :追加したいテーブル名, カラム名, 必要ならオプション名#記入例
class CreateBookmarks < ActiveRecord::Migration[5.2] def change create_table :bookmarks do |t| t.references :user, foreign_key: true, null: false
Vuex(Store)で保存したデータがリロードすると消える
## はじめに
フロントエンドにNuxt.jsを使用し開発中、Vuexに保存した情報が
リロードすると消えてしまって少しはまったその備忘録## 環境
macOS
Nuxt.js Rails Docker postgresql## Storeについて
【Nuxt.jsでStoreにデータを保存するメリット】
componentsでもStoreから直接データを持ってこれる
※ Storeを使用しないとProps/emitを使用し各componentsへデータを渡さないといけない## 対策
[vuex-persistedstate]を導入し
Storeに保存されたデータを[LocalStorage/SessionStorage]へ保存し
リロード時にデータを照合しStoreのデータを復元する
※今回はlocalStrageに入れます## vuex-persistedstate導入
“`
root $ docker-compose run front yarn add vuex-persistedstate
“`## localStrage.js作成
“`
fron
【Rails】memberとcollectionの違い
##“member“と“collection“が使われる理由
どちらもresourcesでroutingを設定しているとき、“resourcesでは自動で生成されないactionへのroutingを設定“するときに使用するもの。“member“,“collection“ルーティングを行うと、**新たにルーティングした**“〇〇_photo_urlヘルパー“と“〇〇_photo_pathヘルパー“も作成される。
##“member“と“collection“の違いとは
生成するroutingに、“:id“の有無で決まる。“:id“とは 、URL内に記述されるIDのことである。
“`
#rails routes#id有
/users/:id/follow(.:format)#id無
/users/slide(.:format)
“`“menber“はidが**有り、**“collection“はidが**無い。**
**◆member記入例**
この場合は“user resources“に“foll
Rails 7.0でbootstrap-iconsを使う方法
Rails 7.0でbootstrap-iconsを使う方法を紹介します。
https://icons.getbootstrap.com/
## おことわり
この方法がベストかどうか確信がないので、もっといい方法があればコメント欄等で教えてください :pray:## 前提条件
以下のコマンドでrails newしたRails 7.0アプリを想定します。
“`
rails new everydayrails-rspec-jp-2022 –css bootstrap
“`また、この記事で使う bootstrap-icons のバージョンは1.7.2です。
https://www.npmjs.com/package/bootstrap-icons
## 手順
bootstrap-iconsをインストールする
“`console
npm i bootstrap-icons
“``app/assets/stylesheets/application.bootstrap.scss`に以下の行を追加する
“`scss:app/assets/styleshe
redirect_toとrenderメソッドの違い
#はじめに
『なぜredilect_toではなくてrenderを使うのだろう??』
「renderのメリットは何??」
画面遷移を行うrenderメソッドとredilect_toメソッドについて、このような疑問が湧いたのでまとめてみました。#renderメソッドとredilect_toの違い
画面遷移を行うメソッドはrenderとredilect_toの二つがあります。2つのメソッドの違いは
①render→リクエストを送らず、そのままviewを表示
②redilect_to→再度リクエストを送り、routing→controllerを通りviewを表示させる
です。#renderとredilect_toの使い方
renderとredilect_toはそれぞれどのように使うのでしょうか。1つの例として、updateアクションで更新に成功したらredilect_toでトップページに戻る。ブランクなどで更新に失敗したらrenderでeditページに戻るという実装があります。“`hoge_controller.rb
def update
@hoge = H
Railsでログの改行を削除して出力
## やったこと
SQLなどヒアドキュメントで記述されたテキストが出力されたログが非常に見づらかったので、
改行を削除したログを別途出力するようにした。(ついでに処理時刻とpidも)## コード
“`ruby:config/application.rb
require_relative ‘custom_formatter.rb’class Application < Rails::Application config.logger = Logger.new('log/custom.log') config.logger.formatter = CustomFormatter.new # config.log_formatter = CustomFormatter.new end ``` ```ruby:config/custom_formatter.rb class CustomFormatter < Logger::Formatter cattr_accessor(:datetime_format) { "%Y/%m/%d %H:%M:%S" } def ca
[RoR]EasyMDEと非同期で画像をドラッグアンドドロップ?
# 環境
Ruby 3.0.2
Rails 6.1.4
EasyMDE 2.15.0
# EasyMDEの導入
`$yarn add easymde`“`js:/app/javascript/packs/application.js
require(“easymde”)
“`
“`js:/app/javascript/packs/任意のファイル.js
import * as EasyMDE from ‘easymde’;
import “easymde/dist/easymde.min.css”;
var easyMDE = new EasyMDE({
uploadImage: true,
imagePathAbsolute: true,
imageUploadEndpoint: ‘任意のエンドポイント’,
showIcons: [‘strikethrough’, ‘code’, ‘table’, ‘redo’, ‘heading’, ‘undo’, ‘heading-bigger’, ‘heading-smaller’, ‘heading-1
【Rails】マイグレーションを利用したテーブルの作成について
#マイグレーションを利用したテーブルの作成について
##マイグレーションは以下の2段階に分けて行う。
1段階目:「マイグレーションファイルの作成」“`
rails g model~#実は「rails g model~」のコマンドでモデルを作成した際に
#モデルと一緒にマイグレーションファイルが作られる。(db/migrate)
“`2段階目:「マイグレーションファイルの実行」
“`
rails db:migrate#このコマンドでマイグレーションファイルを元にテーブルが作られる。
“`##マイグレーションファイルのその後
マイグレーションファイルは、実行したらその後は基本的に編集しない。
実行したら終わり。##開発を進めていく中で新しくモデルを作ることになったら?
モデルとマイグレーションファイルを作り、マイグレーションファイルを実行するという流れで進んでいく。※実際の開発現場では、モデルは数十個存在する。
開発途中でテーブルに変更を加えることはよくあるので
マイグレーションも実際の現場では、モデルの数以上に存在します。>引用元:基礎から
【Rails】ActiveRecordの機能について
# ActiveRecordの機能について
・RubyのコードをSQLへ変換する機能
・ActiveRecord経由でデータベースから取得したデータを自動的にインスタンス化して返す機能
“`
>id = 1
>book = Book.find(id)#findメソッドでデータベースからデータを取得。
#そして返ってきた結果をbookという変数へ代入している。
#このbookに入っているものがBookのインスタンス。
“`>引用元:基礎から学ぶ Ruby on Rails: 1週間の短期間講座!楽しく学ぶRailsの新しい入門書
【Rails】「rails console」で書いたコードについて
「rails console」で書いたコードは原則として消えてしまう。
しかし、実行した結果は消えない。つまり、「rails console」を使って
・「データベースへの登録」
・「データベースの更新」
を行うと、たとえ「rails console」を終了しても登録内容・更新内容は
データベースに反映されている。※「データベースの更新」の場合は、「.save」メソッドを使って更新内容を保存しないとデータベースには更新内容が登録されないので注意。
【Rails】「.find」と「.find_by」の違い
・「.findメソッド」⇒引数に取るのはid(属性は取らない)
・「.find_byメソッド」⇒引数に取るのは属性(idは取らない)
【Rails】「.new」と「.create」をそれぞれ実行すると…
.newを実行すると…
→インスタンスの新規作成が行われる。.createを実行すると…
→new+saveが行われる。
→「idカラム」や「created_at」や「update_at」がテーブルに付与される。
$Heroku push rejected due to an unrecognized error; error: failed to push some ref
## $ Heroku push rejected due to an unrecognized error; error: failed to push some ref
### 初めに
今回この記事では、herokuにデプロイするする際に私が遭遇したエラーについて解決方法をこの記事で書いていきたいと思います。実はこのエラーは[こちら](https://stackoverflow.com/questions/8273226/heroku-push-rejected-due-to-an-unrecognized-error-error-failed-to-push-some-re)に記事が出ているのですが、英語の記事読むには抵抗があるという方に向けて書いております。参考になれば幸いです。
***### 今回のエラー
“`
// herokuにpushをするコマンド
$ git push heroku master// pushの作業が行われて一見成功したように見えても下にエラーが吐かれる
//上に出ているターミナルのログは省略
! Heroku push rejected
Rspecのrequest specにて値の削除や更新、作成などのテストをする際の注意点
## 概要
Rspecのテストで、値を更新や削除などのデータ変更が加えられた際に
テストの記述の仕方について多少手間取ったので備忘録としてアウトプットします。## 環境
Ruby ‘3.0.1’
rails ‘6.1.4’
rspec-rails ‘5.0.2’## テストコード
### 前提
今回のテストはpostコントローラーにdeleteリクエストを送った際に、
該当する投稿データが削除されるといったテストを想定します。
__なお、実際のコードについては説明に重点を置くため簡易的に表記します。___*controllers/posts_controller.rb*_
“`ruby
class PostsController < ApplicationController def destroy post = Post.find(params[:id]) # 左記のコードでは誰の投稿でも削除が可能になってしますので、 post.destory # ユーザー自身の投稿のみ削除可能にするための条件分岐等を行ったほうが
インスタンス変数の簡略化メモ
●インスタンス変数
3段活用
以下、全て出力結果は同じになる“`:①基本の書き方
class Test
# セッター
def name=(name)
@name = name
end# ゲッター
def name
@name
end
end“`
“`:②セッターとゲッターをそれぞれ簡略化
class Test
# セッター
attr_writer :name
# ゲッター
attr_reader :name
end“`
“`:③全て簡略化
class Test
attr_accessor :name
end“`
【Rails】redirect_backとは
redirect_backを使うと、“直前のページにリダイレクト“をしてくれる。
“`使い方.
redirect_back fallback_location: 直前のページに戻れなかった際のパス#使用例
redirect_back fallback_location: root_path
“`redirect_backを使う際は、直前のページに戻れなかった際のパスの記述が必要。