Ruby関連のことを調べてみた2021年08月05日

Ruby関連のことを調べてみた2021年08月05日
目次

【Ruby on Rails】devise実装後にログイン・ログアウト後のリダイレクト先を指定する方法

#対象者

* deviseを実装済の方
* 管理者・ユーザーで2つのdeviseを実装した方
* ログイン・ログアウト後の動作を考えている方

#目的

* devis実装後にログイン・ログアウト後の遷移先を指定する条件を作ること

#実際の手順と実例
###1.前提
* devise実装済(実装方法は下記の通り)

https://qiita.com/nao0725/items/83c73c417be01913a857

* Admin/User2つのモデルを作成している

###2.今までの方法(devise1つだったとき)

““`
private
def after_sign_in_path_for(resoure)
root_path
end
““

###3.新しい実装方法(devise 2つ実装した場合)

““application_controller.rb
private
def after_sign_in_path_for(resource_or_scope)
if resource_or_scope.is_a?(Admin)

元記事を表示

ローカルにインストールしたパッケージとライブラリの削除方法[Homebrew, Ruby(Gem)]

## この記事の目的

以下の手順通り、Rubyの開発環境構築を自動化しました。方法としましては、シェルスクリプトを用いて、Homebrewによるパッケージのインストールの段階からコードで管理するようにしました。
その際に、シェルスクリプトの冪等性を確保する為に、このスクリプトを用いた環境構築のテストを行う必要がありました。
そしてそのテストの為に、一度ローカルにあるパッケージやGemを削除しましたが、少し面倒だったので忘れないようここに記しておきます。

https://qiita.com/koki0527/items/6cbd1b0b41c9f33a69cc

## Homebrewでインストールしたパッケージを削除する

私はローカルの環境構築の自動化をテストしたかった為、出来る限りローカルを初期状態に戻す必要がありました。その為私は、**自身でインストールしたパッケージ**と、**依存関係によりインストールされたパッケージ**全てを削除しようと考えました。その方法を下に記載します。

### 一覧を表示

Homebrewでは、パッケージのことをformulaeと呼びます。以下

元記事を表示

単体テスト実施前までの流れ

# はじめに
本記事では、単体テストを開始するまでの流れを記述します。
今日の学習で、テストコードをあまり理解できていないことがわかったため、
アウトプットいたします。
以下、過去にテストの際に登場するメソッドなどを投稿しておりますので、
ご参照ください。

https://qiita.com/mkato1013/items/48870bc17580448fc256

#テストコード実施までの流れ
## Gemの追加
RSpecを使用するのには、まず`Gemをインストール`する必要があります。
RSpecのGemです。
*私は、10分ほどspecのディレクトリを探しておりました。ここでGemということを再認識。

①Gemfileに記述
記述するものは「`gem ‘rspec-rails’, ‘~> 4.0.0’`」です。

“`ruby
group :development, :test do

省略

gem ‘rspec-rails’, ‘~> 4.0.0’
end
“`

②bundle install
省略

“`
% cd (ディレクトリ)
% bundle in

元記事を表示

[Ruby on rails]検索結果でもページネーション使う kaminari

初めに

過去の検索機能実装の記事はこちら。

https://qiita.com/ki_87/items/eb6d4e440195c3b3c5a2

ページネーション導入済みで、一覧画面では使用してましたが、
検索結果では使わず、全表示にしていました・・・。
なので、今回検索結果の表示画面でもページネーションを使用していきたいと思います。

コントローラー

“`
class Users::SearchesController < ApplicationController def index users= User.search(params[:keyword]) @users=users.page(params[:page]).per(25) end end ``` これでほぼOKです!

VIEW 検索結果表示画面

“`

元記事を表示

【Ruby on Rails】autofocus: trueを使って自動で焦点をあてる方法

#対象者

* 投稿フォームを作ろうとしている方
* クリックしなくても自動で入力待機状態を作りたい方

#目的

* autofocus属性を使って、自動でカーソルをあわせられるようにする!

#実際の手順と実例
###1.autofocus属性とは??

* autofocus:trueでページを読み込んだ後、クリックすることなく、カーソルが移動して入力待機状態を作るというメソッド(?)です。

###2.具体例

本の投稿をするアプリを例とします。
入力は下記の通り

““app/views/devise/registrations/new.html.erb

Sign up

<%= form_with model: @user, url: user_registration_path, id: 'new_user', class: 'new_user', local: true do |f| %>


<%= f

元記事を表示

【初見】ActiveRecord::InvalidForeignKey を初学者なりに噛み砕いて備忘録を記述してみる。

# タイトルにもあるとおり始めてのエラーです(多分)
Mysql2::Error: Cannot delete or update a parent row: a foreign key constraint fails とありまして、何が原因になっていたかを備忘録として書き残そうと思います。

#解決策から紹介します。
このエラーの解決は、モデルに追記した後に、データベースをリセットすることで、解決しました。
コードだけだと意味がわからない記述になっているの以下の説明も一緒に読んでください。

“`Ruby
# model/study_time.rb
belongs_to :skill, optional: true #optional: true を追記

# mdoel/skill.rb

has_many :study_time, foreign_key: :skill_id, dependent: :destroy #foreign_key: :skill_id, dependent: :destroy を追記

“`

# どういう仕組みで起こったのか。
作成しているア

元記事を表示

[Ruby on rails]グループ作成機能④ グループ管理者のグループ編集/グループ削除 外部キー制約のデータ削除

初めに

![スクリーンショット 2021-08-03 22.38.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/993e7291-1dbf-3631-afbb-96aa91cab457.png)

①②の記事でグループの作成、グループへの参加、退会機能を実装しました。
③ではグループ管理者の表示も行いました。

しかし、グループの編集/削除機能をすっかり忘れていましたので、今回グループの編集機能をつけていきます。

:sunny:注意①②と③④で作ってるアプリが違います。
①②は本の投稿(bookモデル)サイトでの、グループ作成機能。
③④は記事の投稿(postモデル)サイトでの、グループ作成機能です。
①②と③④でGroupのカラムが若干違います。
グループ名(name)、
グループ紹介(introduction)
オーナーid(owner_id)は共通ですが、
①②では、t.string :image_idがあるのに対し、
③④では、image_idが無く

元記事を表示

インスタンス変数とローカル変数の違い

# はじめに
本記事は、インスタンス変数とローカル変数の違いをまとめたものです。
正確な理解ができていなかったため、アウトプットします。

# 結論
いきなり結論ですが、
`スコープ`の違いです。

スコープとは、
ある変数や関数などの名前を参照できる`範囲`のこと。

### ローカル変数の範囲
ローカル変数は、極端に言いますと、
`定義した場所`でしか使えない。ということです。

例えば、def~endで定義したのであれば、その場所でしか使えない。
という認識です。

### インスタンス変数の範囲
インスタンス変数は、
`定義した場所以外でも使用可能`です。

例えば、def~endで定義していない場所、
コントローラー内で定義したのであれば、`ビュー`でも使用できる。
という認識です。`→(8月4日訂正、以下の通り)`

“`
コントローラーで作ったインスタンス変数は、
ビュー側でも同じ名前のインスタンス変数を作ることができ、
その変数の値を使用することができる。
(@scivola さん ご指摘ありがとうございます!)
“`

# 例文
コントローラーやビューなどを考慮せ

元記事を表示

[Ruby on rails] グループ作成機能⑥ Action mailerの環境変数化 gem(dotenv-rails) /.env

環境変数を設定する

グループ作成機能⑤でグループメンバーにメールを送信する機能を実装しました。
gmailのアドレス、パスワードを直打ちしてるので、セキュリティ的にあまりよろしくありません。
そこで使うのが環境変数です。

なんか大変そう・・・:frowning2:と思ってたのですが、すぐ出来ます!!!

もうメールの機能は出来上がってる前提です。
メール機能の実装については⑤の記事をご確認ください。

https://qiita.com/ki_87/items/67f8965e8de17e95ac1c

gemのインストール

“`perl:Gemfile
# 環境変数化のためのgem
gem ‘dotenv-rails
“`

そしたら“`bundle install“`で取り込みます。

.envファイル作成

Gemfileなどが置いてあるルートディレクトリに .env というファイルを作成します。
以下のような感じになるはずです!

![スクリーンショット 2021-08-03 21.17.30.

元記事を表示

[Ruby] AtCoder過去問 B – Cycle Hit

##はじめに
RubyでAtCoderのB問題解いてみました。
私のレベル的にB問題のレベルが解いてて一番気持ちいいです。

C問題にもなれていかなくては。
それではよろしくお願いします。

問題はこちらからご確認ください↓

https://atcoder.jp/contests/abc211/tasks/abc211_b

##B- Cycle Hit

まずは入力の受け取り方ですが、配列に全ての入力を格納していきます。
空の配列を用意して、四つの入力を受け取るので繰り返し処理で4回放り込みます。

“`ruby
s = []
4.times do
s << gets.chomp end ``` これで配列の中に四つの入力が入りました。 あとはinclude?メソッドで、配列にH, 2B, 3B, HRの四つが存在するかを調べて、TrueならYesをFalseならNoを出力させればいいはずです。 ```ruby s = [] 4.times do s << gets.chomp end if s.include?("H") && s.include?("2B") &

元記事を表示

引数を影響を与えずにメソッドをオーバーライドしたい時は … 記法を使う

# 概要
ruby 3.0 以降はキーワード引数の仕様変更により引数の渡し方によってはエラーになるため、メソッドをオーバーライドするときは引数を `…` にするのがいいという話です。
これは 2.7 から追加された記法で引数の転送(Arguments Forwarding)というらしいです。

“`ruby
class Parent
def self.hoge(a, b, c: ‘c’)
“#{a}, #{b}, #{c}”
end
end

class Child1 < Parent def self.hoge(*) "child1 #{super}" end end class Child2 < Parent def self.hoge(...) "child2 #{super}" end end Child1.hoge('d', 'e', c: 'f') #=> ArgumentError: wrong number of arguments (given 3, expected 2)

Child2.hoge(‘d’,

元記事を表示

#4 SinatraでActiveRecordを使わずに掲示板アプリを作ってみた

[前回](https://qiita.com/divclass123/items/9a9e2f9ccfba2286a901#comment-2aa5a3d01881ceaf6cc4)の続き

前回コードを見ていったので、いよいよアプリを実行して実際の挙動を見ていきたいと思います!
んで、どんな感じでデータベース作成すればええねん。と思ったが、
setup.shを実行すれば良いと、課題の作者の谷道さんから教えていただきました。ありがとうございます。。。!(2ちゃん風に言うとサンガツ、知らんけど)

# 下準備

.shの拡張子がついているファイルすら初めて見たので、、、。
まぁ要するにlinuxコマンドをファイルに書いといて
“`
$ sh setup.sh
“`
とかで一斉に実行できる感じ。

# setup.sh

“`
mysql -u root < ./database/create_database.sql mysql -u root 0ch < ./database/create_topics.sql mysql -u root 0ch < ./database/cre

元記事を表示

【Rails】 N+1問題 (eager_loadとpreload)アプリで学べ

##はじめに
最近SQLの知識がついてきたので、N+1問題を改めて勉強。
そしたらまだまだわかっていない箇所があったので、アウトプットしていく。
アウトプットのやり方は 教材アプリで実施(下記URL参照)
実際に手を動かして知識の定着をはかる

https://www.techpit.jp/courses/79/curriculums/82/sections/623/parts/2162

僕らがスクールで扱っていたデータ数なんて毛みたいなものなので、今回は700近いデータ数で実施。
データ数多いので、表示スピードにもろ影響することがわかる。

### 対策メソッド

![スクリーンショット 2021-08-03 15.37.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1183228/13dbfa6c-5228-9138-d154-7449df90ccfd.png)

詳細はいっぱい記事があるので、割愛します。
下記2つの記事がわかりやすかったので見て下さい。

https://qiita.co

元記事を表示

【Rails/Ruby/Docker/LINE messagingAPI/Heroku】単語帳bot

## 1.はじめに
初めまして、小林凌(こばやし りょう)と申します。

現在、バックエンドエンジニアへの転職を目指し、転職活動中です。

当記事は、**LINE messagingAPI**を活用したアプリケーションの開発の流れをまとめた記事になります。

LINE messagingAPIを活用して、開発したい方の参考になればと思います。

## 開発アプリ

まず私が開発したアプリについて紹介します。

– アプリ名 「単語帳bot」
– 公式LINEなので下記QRコードから友達登録できます。

![スクリーンショット 2021-07-26 12.00.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1536072/8eaaac60-60b7-ceaf-238b-eb320d7cd92d.png)

LINEでのトーク画面で、**問題、答えの登録**を可能にし、自作の**単語帳や問題集**として使用できます。

– **デモプレイ動画**