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

Rails関連のことを調べてみた2021年09月24日
目次

act_as_paranoidで論理削除された子/親要素にアクセスできない時の対処方法

## 概要
掲題の通りハマったので自分のためのメモも兼ねて記載しておきます。

## 前提
店舗とそこに紐づく店員を表現するアプリを作るとします。
親をshop,子をclerkというテーブル名で作成します。
そして子要素経由で、親要素の名前やIDにアクセスする際にはactive recordのjoinやreferencesではデータが取得できません。
なので以下のように別のリレーションとして設定してあげて取得できるようにしてあげてください。

親クラス shop

“`ruby
class Shop < ActiveRecord acts_as_paranoid end ``` 子クラス clerk ```ruby class Clerk < ActiveRecord acts_as_paranoid belongs_to :shop belongs_to :with_deleted_shop, -> { with_deleted }, class_name: ‘Shop’, foreign_key: :office_id, inverse_of: :Sho

元記事を表示

[SQL]基礎的なこと

# はじめに
本記事は、SQLの基礎的な部分について記述します。
そういえば、SQLってなんだっけ?と恥ずかしながら疑問に思ったため記述します。

# SQLとは
`DBを操作する言語`です。
「Structured Query Language」の略

Structured = 構造化
Query = 問い合わせ
by Google先生

私は、Rubyを使っているので`rails db:createコマンド`や、
Sequel Pro(シークエルプロ)を使用したデータの書き換えは行ってきました。

これらの操作は、
最終的にSQLという言語が`実行されて実現する仕組み`になっており、
SQLを直接使用せずに、
「特定のコマンドの実行」や「GUI操作」を実現できます。

# SQLによるデータベースの操作
データベースやテーブルに対して命令でき、大きく以下の3つに分類されます。
– `データを定義`「DDL(Data Definition Language)」
– `データを操作`「DML(Data Manipulation Language)」
– `データを制御`「DCL(Dat

元記事を表示

rails s を実行した際に`Gem Load Error is: AddDllDirectory failed for C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/pg-1.2.3/lib/x64-mingw32`が発生した時の解決方法

#はじめに
Railsで簡単なsnsアプリを作成している際に以下の問題が発生して1日沼にはまったのでそれの過程と、同じようなことが起きても忘れないよう記録として残しておきます。
同じ問題に直面した方々の役に立てれば幸いです。

# 前提・使用環境

・Windows 10
・Ruby 3.0.2
・Rails 6.1.4.1
・Postgresql 12.8

#起きた問題
`rails s`を実行した際に
`Gem Load Error is: AddDllDirectory failed for C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/pg-1.2.3/lib/x64-mingw32`
というエラーが発生。エラーは以下の通り。

“`terminal:コマンドプロンプト
C:/Ruby30-x64/lib/ruby/3.0.0/bundler/runtime.rb:69:in `rescue in block (2 levels) in require’: There was an error wh

元記事を表示

【Rails】いいね/コメント/フォロー/DMの通知機能

#はじめに
通知機能の復習のため残しておきます。

#手順

###前提
いいね/コメント/フォロー/DM機能はそれぞれ作成済みとします。

今回は、

– post(投稿)に対するいいね、コメント
– user同士のフォロー
– フォローユーザー同士であればdm可能

という条件で機能を作成しています。

###やったこと

まず、通知の流れとして、
1.いいね/コメント/フォロー/DMのcreate時に、独自のメソッドで通知を作成
2.独自のメソッドが定義されているモデルへ行き、指定された処理を行う

いいね、コメント、フォロー、DMの順で記します。

###いいね通知

“`ruby:favorite_controller.rb
@post = Post.find(params[:post_id]) #いいねをする投稿を探す
favorite = current_user.favorites.new(post_id: @post.id) #いいねを作成
favorite.save
@post.create_notification_favorite!(current_user)

元記事を表示

railsチュートリアル第6章 ユーザーオブジェクトを作成する

###ユーザーオブジェクトを作成する
Railsコンソールを使ってデータモデルを調べてみましょう。
データベースを変更したくないので、コンソールをサンドボックスモードで起動します。

“`
buntu:~/environment/sample_app (modeling-users) $ rails console –sandbox
Running via Spring preloader in process 13943
Loading development environment in sandbox (Rails 6.0.3)
Any modifications you make will be rolled back on exit
>>
“`
コンソールをサンドボックスで起動すると、そのセッションで行ったデータベースへの変更をコンソールの“`終了時にすべて “ロールバック”(取り消し)“`してくれます。

User.newで新しいユーザーオブジェクトを生成しましたが、リスト 4.17のexample_userファイルを明示的にrequireするまでこのオブジェク

元記事を表示

railsチュートリアル第6章 modelファイル

###modelファイル
Userモデルの作成によって“`どのようにマイグレーションファイルが作成されるか“`を見てきた。

usersテーブルを作成することで、development.sqlite3という名のファイルを更新し、id、name、email、created_at、updated_atを作成しました。

この節では、以後このモデル用ファイルを理解することに専念します。

app/models/ディレクトリにある、user.rbに書かれたUserモデルのコードを見てみましょう。
####生成されたばかりのUserモデル

“`rb
class User < ApplicationRecord end ``` ```class User < ApplicationRecord```という構文で、Userクラスは```ApplicationRecord```を継承する Userモデルは自動的に```ActiveRecord::Baseクラスのすべての機能を持つ```ことになります ActiveRecord::Baseに含まれるメソッドなどについて```知らなければ何の役にも

元記事を表示

railsチュートリアル第六章 ユーザーのモデルを作成する

#ユーザーのモデルを作成する
新しいユーザーを作成するためのスタブページを作ったところで終わりました
“`これから6つの章を通して、ユーザー登録ページを作っていく“`ことにしましょう。

本章では、
一番重要な“`ステップであるユーザー用のデータモデルの作成“`と、
“`データを保存する手段の確保“`について学んでいきます。

######自分で認証システムを作ってみる
すべてのWebアプリケーションは何らかの“`ログイン/認証システム“`を必要と
多くのWebフレームワークではこのような“`ログイン/認証システムを実装するための選択肢が多数提供されています“`。

出来合いのシステムは内部が謎だらけの“ブラックボックス”になっている可能性もあり、
そうしたシステムで使われている複雑怪奇なデータモデルをいきなり用いると初心者はもちろん、
ベテラン開発者すらそうしたモデルに不慣れであれば、途方に暮れてしまうかもしれません。
自分自身で“`認証システムを構築した経験があれば“`、サードパーティ製品を理解し、必要に応じて変更することがずっと容易になるはずです。

##

元記事を表示

deviseについて①

自分用としてのメモを残します

####1 Gemfileに gem ‘devise’ を記述
→ $ bundle install

次にインストールしたdeviseをセットアップ
→ $ rails g devise:install

これでdeviseを使う準備が整いました。

####2 ユーザーのテーブルを作成する
とりあえずUserでモデルを作るとします
→ $ rails g devise User

マイグレーションファイルを確認してみるとデフォルトでまあいろいろと
書かれていますがpasswordやemail等必要であれば自分で記述していく

######例えば、機能として住所を入れたいと思ったときは、
→ string型のaddressカラムを作成… t.string :address を追加!

追加が終わったら…
「 $ rails db:migrate 」これは絶対に忘れないようにしよう!!!!

— 
1. config/routes.rb を確認してみると devise_for :users が自動生成せれてるよ

元記事を表示

tmux でサーバ上でバッチ処理を実行する、そしてそのログファイルをローカルに落とす

個人的メモ。rails のバッチ処理の場合を想定。

## 手順

リモートサーバーにssh接続する。

“`sh
$ kubectl exec -it /bin/bash
“`

“`sh
$ apt-get update
$ apt-get install tmux

$ tmux new -s

# ログを書く出す前に、tmux-logging pluginをinstall
$ mkdir /temp && cd /temp
$ git clone https://github.com/tmux-plugins/tmux-logging ~/temp
$ echo ‘run-shell ~/temp/logging.tmux’ >> /root/.tmux.conf
$ tmux source-file /root/.tmux.conf

# Started logging to /root/xxxxxx.log と表示される。このファイル名をメモ。

# railsディレクトリへ移動。
$ cd /app

元記事を表示

Rails でやったらアカン事が大量に詰まったプロジェクトとの戦いを晒す

少し前の話だけど途中からプロジェクトにジョインして色んな意味でヤバい目にあった経験を晒す。
今思うとよくあのプロジェクトの火消しをしてリリースしたなと思う。

※ 当時のプロジェクトの Rails バージョンは 5.1.x です。

## 開発メンバー

Rails を書くエンジにはは 5 名くらい?いたが、そもそも Rails またはプログラミング自体の知識不足の状態だった。また 1 名を除いてはほぼ新卒orジョブチェンをした若手メンバーで構成されていた。

その 1 名のシニアなメンバーも本業が Android エンジニアだったり、もう一人は個人開発で多くの経験を積んでいたが業務プログラミングが超絶初心者で好き勝手「とりあえず動く (It works)」コードが書き散らされていた。

これだけの人数がいるにも関わらずまともに Rails を理解しており指導できる人が居なかったというのが全てだったと思うし、そのために自分がアサインされた。

## まず最初に目についたこと
何と言っても最初コードを見た時にものすごい吐き気と共に冷や汗を書いたのを今でも覚えている。

“`
全てのコー

元記事を表示

resources :column_name 

7つのアクションを自動で設定してくれるroutes:column_name

get ‘/users/new’, to: ‘users#new’
の書き方で一つ一つ設定しても良いが、レールを準備してくれている。

さらに必要なアクションを指定する方法があり、以下の通り

resources :リソース名 :only => :アクション名
resources :リソース名 :only => [:アクション名, :アクション名, …]

不要なアクションを指定する方法は以下の通り、

resources :リソース名 :except => :アクション名
resources :リソース名 :except => [:アクション名, :アクション名, …]

rails routesで確認すれば、routeやpathを一覧で確認できる。

元記事を表示

Circle CI + rails + AWS で自動テスト、自動デプロイが失敗した(Autoscaling 使用)

#概要

うまくいかなかったので、teratailの下記の質問に答えていただけたらとても嬉しいです。

[https://teratail.com/questions/359594](https://teratail.com/questions/359594)

前回書いた下記の記事からの続きです。
[EC2 + RDS + Capistrano + unicorn + nginxでrailsアプリを自動デプロイ メモ](https://qiita.com/nakayama_ryotaro/items/ea935c668bba97821b8e)

前回はCapistranoでしたが今回はCode〇〇 の4つを使った自動デプロイを行います。
まずは自動テストをCircleCIで、できるようにします。

#database.yml の編集
テスト用のデータベースが使えるよう、前回からdatabase.ymlを変更
もしかしたら必要ない記述もあるかもしれません。

“`yml:database.yml
default: &default
adapter: mysql2
encod

元記事を表示

【Rails】マイグレーションでDATE型のデフォルトを現在日時にする

レコードが作成された日時をデフォルトにカラムが作成されるようにしたい。
DATETIME型で現在日時をデフォルトに入力する方法は多々見つかったものの、DATE型については情報があまり見つからなかったのでメモする。

# DATE型で現在の日時をデフォルトにする
#### migration
“`
t.date :date, null: false, default: -> { ‘(CURRENT_DATE)’ }
“`
※`()`を忘れずに!!

#### 確認
“`
mysql> show columns from テーブル名 like “date”;
+———+——+——+—–+——————+——————-+
| Field | Type | Null | Key | Default | Extra |
+———+——+——+—–+——————+——————-+
| d

元記事を表示

[Rails]controllerのストロングパラメータとは

##初めに
####なぜこの記事を書きたかったのか
requireは何を指定してるのかわからなくなったので、ストロングパラメータの再確認をするためにメモしたい!

####環境
・Macbook Air (Retina, 13-inch,2019)
・プロセッサ 1.6GHz デュアルコアIntel Core i5
・メモリ 8GB 2133 Mhz LPDDR3
・MacOS Big Sur バージョン 11.5.2

####記事の目次
**1)ストロングパラメータってなんぞ?**
**2)どうやって使うの?**
**3)最後に**

##ストロングパラメータってなんぞ?
**controller内に新たに作成したメソッド名に取得したい情報を指定することができる**

##どうやって使うの?
####1)controller内のアクションの命令式にストロングパラメータに使うメソッド名を追加する。(今回はorder_paramsとする)
**(例えば)通販サイトにuserが商品の届け先を記入しなければならないページがあるとする。その個人情報を保存するときcreateアクションで処理す

元記事を表示

【rails】 存在しないデータにアクセスした時の例外処理

# レコードに存在しないデータにアクセスした

作成したコントローラーに

“`profile_controller.rb
class ProfilesController < ApplicationController def show @profile = Profile.find(params[:id]) end end ``` とだけ書いて適切な例外処理を書いていない場合、存在しないデータのURLにアクセスしようとすると ![スクリーンショット 2021-09-23 14.06.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1067124/0184b12f-bfba-fd95-8d5e-f7de0e42c37d.png) ActiveRecord::RecordNotFoundというエラーが出てしまいます。 このようにレコードにデータが存在しない場合の例外処理を書いて行きます。 # rescueを用いた例外処理 `rescue`を使うと、エラーが発生した場合次に行う

元記事を表示

Rails 7 をちょこっと試す(さらば、Webpacker 編)

## はじめに

[Rails 7.0 Alpha 1](https://weblog.rubyonrails.org/2021/9/15/Rails-7-0-alpha-1-released/) がリリースされたということで、フロントエンド周りがどうなっているのか、プロジェクトを作ったときどうなるのか、ほんのちょっとだけ、調べてみました。

今回、使ったバージョンは、`gem install rails -v 7.0.0.alpha2 –pre` でインストールした[Rails -v 7.0.0 alpha 2](https://github.com/rails/rails/tree/v7.0.0.alpha2) です(2021/09/23執筆時点でリリースのアナウンスはまだ?)。

“`
$ rails -v
Rails 7.0.0.alpha2
“`

## フロントエンド関連のオプションなしで rails new する

フロントエンド関連のオプションなしで、 `rails new` してみます。

“`shell
rails new . –database post

元記事を表示

[Rails]ログイン/新規登録機能とauthenticate_user!について

##初めに
####なぜこの記事を書きたかったのか
一度新しくアプリケーションを作るとき、deviseの存在は思い出せれるけど、どうやって使うのかど忘れるときがあるからメモしたい!

####環境
・Macbook Air (Retina, 13-inch,2019)
・プロセッサ 1.6GHz デュアルコアIntel Core i5
・メモリ 8GB 2133 Mhz LPDDR3
・MacOS Big Sur バージョン 11.5.2

####記事の目次
**1)何ができるのか**
**2)前提条件**
**3)authenticate_user!とは?**
**4)authenticate_user!の使い方**
**5)最後に**

##何ができるのか
**=ログインしていないuserを感知して、強制的にログインページへ遷移させることができる**
**このメソッドが全部やってくれるので、自分でメソッド名を新たにつくって命令式を書かなくても自動でやってくれる!**

##前提条件:ログイン/新規登録の機能
####1)Gemfileの一番下にdeviseというgemを設定

`

元記事を表示

クッキーとセッションの違い

# クッキー
RFC 6265で定義されているHTTPにおけるブラウザとサーバー間で状態を管理するプロトコル。
HTTPにおける通信ではステートレスなので同じユーザーからのリクエストだとしても1回目のリクエスト2回目のリクエストで区別することができない。そこで、ユーザーに関する情報(ユーザーID,パスワード)などをブラウザ内のクッキーにテキストファイルとして保存する。この保存された情報をリクエスト時にサーバーに送ることで、サーバー側はどのユーザーのリクエストかを判別することができる。
ここで重要なのは、ユーザー情報そのものをクッキーに保存している点である。

# セッション
セッションとは通信の開始から終わりまでの一連のやり取りのこと。
セッションIDと呼ばれる識別子によってユーザーを判別する。クッキー との違いはユーザー情報そのものをユーザー識別として使うのではなく、セッションに紐づけられた識別子でユーザーを判別する。また、このセッションIDの保存場所はクッキーでもURLでも隠しinputフィールドでも良い。
また、セッションIDとそれに紐づくユーザー情報はウェブサーバーのメモリ上

元記事を表示

[Rails]before_actionとは?

##初めに
####なぜこの記事を書きたかったのか
controllerの使い方の復習のため

####環境
・Macbook Air (Retina, 13-inch,2019)
・プロセッサ 1.6GHz デュアルコアIntel Core i5
・メモリ 8GB 2133 Mhz LPDDR3
・MacOS Big Sur バージョン 11.5.2

####記事の目次
**1)どういうときに使うのか**
**2)どう使うの?**
**3)いろんなオプション**
**4)最後に**

##どういうときに使うのか
####全てのアクション前に行動できるようになる(controller内にしか使えない)
**どんなシチュエーションがあるのか?**
・(前提:ログイン機能がある)ページ遷移するとき、ログインしていないuserをログイン画面へ強制遷移させる
・(前提:userが個人情報を記入する)userが記入したニックネーム(個人情報)を遷移先へもって来る

##どう使うの?
####before_actionは2つの使い方がある
**1)もう機能が入っているメソッド名をつかう**
・下

元記事を表示

【個人開発】絵文字 “だけ” で日記を書いて友達とシェアするサービスを作りました。

## はじめに

プログラミングの勉強を始めて約半年、初めて作ったアプリ**『emory』**をリリースしました!

日記を習慣化させたい気持ちはあるけれど、忙しい日々の中で三日坊主になってしまう、、
新型コロナウィルスの影響で友達や所属コミュニティのメンバーと直接顔を合わせることが難しくなり、会話をする機会がなくなってしまった、、

**『emory』**は、そんな悩みを抱えている方々に使っていただきたいサービスです!!

https://www.emory.app/

## サービス概要

絵文字 “だけ” を使って日記を書き、友達と日記をシェアすることで、
コミュニケーションのきっかけを作れるサービスです。

**なぜわざわざ『絵文字だけで書くこと』に制限したのか**、2つ理由があります。
① 簡単にそして直感的にその日の感情を表現できるから
② 友達と日記をシェアしたときに、絵文字で書かれた日記なのでプライベートに踏み込みすぎることがないから

では実際に絵文字だけで書いた日記を見てみましょう!
これは私の書いた日記です。どんな一日だったのか想像できますか??
![スクリー

元記事を表示

OTHERカテゴリの最新記事