Ruby関連のことを調べてみた2020年11月18日

Ruby関連のことを調べてみた2020年11月18日

ファイルで定義したメソッドの一覧を取得する

“`ruby
File.foreach(“sample.rb”) { |line|
p line.chomp.gsub(/^\s*def\s/, ”) if /^\s*def\s/ =~ line
}
“`
引数なしで出力する時は`.gsub(/\(.+\)/, ”)`を追加してください。
クラスメソッドとインスタンスメソッドを分けるのはまた今度。

元記事を表示

RailsのViewの共通化について

本投稿の目的

・Rails学習の議事録です。

学習に使った教材

Udemyの [“はじめてのRuby on Rails入門-RubyとRailsを基礎から学びWebアプリケーションをネットに公開しよう”](https://www.udemy.com/course/the-ultimate-ruby-on-rails-bootcamp/) を教材として使用しました。

①viewの共通化

・全てのviewの共通箇所を1箇所に集約する方法
・集約ファイル (app/views/layouts/application.html.erb)

“`ruby:application.html.erb



App
<%= csrf_meta_tags %>

<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track'

元記事を表示

【Rails非同期処理】Sidekiq vs Resque vs Delayed Job 〜Active Jobとは〜

## 1. Active Jobとは
バックグラウンドで実行するジョブをRailsアプリケーションで動かすための**共通インターフェイス**です。
例えばメール送信やCSVアップロード等の時間がかかる重い処理はバックグラウンドで実行することが多いです。

[Rails 4.2](https://edgeguides.rubyonrails.org/4_2_release_notes.html#active-job)で導入された機能で、非同期処理を実装する際にまず検討する事が多いかと思います。

## 2. 共通インターフェイスって?
Active Jobが導入される以前のRailsバージョンの場合、非同期処理を実装するGemを使用していました。
代表的なものでは[Delayed Job](https://github.com/collectiveidea/delayed_job)や[Sidekiq](https://github.com/mperham/sidekiq)、[Resque](https://github.com/resque/resque)があります。

当然それぞれのG

元記事を表示

【Rails】コールバックについて

基本的な事項ですが忘れやすいので備忘録かつ、まとめとして記事にすることにしました。

【参考記事】
[Railsのコールバック](https://skillhub.jp/courses/139/lessons/987)

# コールバックとは?
モデルを保存、更新、削除後や削除前のタイミングで実行されるメソッドのこと指す。
例) 記事を投稿し保存後には〜をする。

“`ruby:
before_save => #保存前
after_save => #保存後
after_update => #更新後
before_destroy => #削除前
after_destroy => #削除後
“`

# コールバック使用例
before_save(保存前)コールバック後にメソッド実行する例を挙げる。

“`ruby:user.rb
class << self before_save :downcase_email def downcase_email self.email = email.downcase end ``` 上記コードはemail保存前に、大文字のロ

元記事を表示

rails new〜デプロイまでの学習レポート

##はじめに

本記事は、ぼくが2020年7月〜10月までに学習した、Ruby及びRailsの内容を振り返るものです。

今年の2月くらいの段階では**HTMLもまるで書けないくらい無知**だったのですが、
等の学習サイトや各種記事を参考にさせていただいて、なんとかデプロイまで漕ぎ着けることができました。

なお現在の状況としては、

– **就職活動中(HTMLコーダー職志望)**
– **学習を継続し、社内でのエンジニア登用を希望している**
– **フロントエンドとインフラに関心が強い**
– **Railsアプリの他に、Web制作に向けたWordPressの学習も行った**
– **フロント・バックともにそれらサイトで学習の継続を予定**

というところです。

##制作したアプリケーション

動いている実際のアプリは[こちら](https://filma.space/)。
使用言語は**Ruby**、フレームワークは**Ruby on Rails**です。

AWS EC2サーバーにて、

– アプリケーションサーバ ▶︎ **Puma**
– Webサーバ ▶︎ **Ngi

元記事を表示

文字列からN番目

#[Ruby] 文字列からN番目
#問題
半角アルファベット文字列 s と 整数 n が入力されます。

文字列 s の1番左の文字を 1 文字目とし n 文字目のアルファベットを出力して下さい。

例えば
paiza 3
と入力された場合
i
と出力して下さい。
#入力される値
入力は以下のフォーマットで与えられます。

s n
#期待する出力
文字列 s の n 文字目を出力して下さい。
#入力例1
thankyou 3
#出力例1
a
#入力例2
abcdefghij 5
#出力例2
e
#私の答え
“`java:
s = gets.split(” “).map(&:chomp)
a = s[1].to_i
puts s[0].slice(a – 1)
“`
#今回のポイント
###1行目で入力例1の場合だと [thankyou, 3] と分割させている
###2行目でa変数に 5 を代入している
###3行目で thankyou をsliceメソッドで5番目の文字列を指定している。ここを (a) のままだと0からカウントされる為 -1 をして調整している
#以上!

元記事を表示

いらないコメントを一括削除する方法

これを覚えると時間の節約になるのでおすすめです。

前提として、環境はMacでエディターはVSCodeです。(Atomでや他のエディターでも同様のコマンドで可能かと思います)

###Railsでテストアプリを作っている時などによく出る長文のコメント結構邪魔ですよね。
![スクリーンショット 2020-11-17 23.19.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674994/9ff80428-e647-9042-a34f-c39724e74be2.png)
そんな時は 

– command+Fで任意のページで検索して

“`
# .*\n
“`
– このコマンドを打ちますと(今回はVScode使ってます)

![スクリーンショット 2020-11-17 23.27.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/

元記事を表示

LINEみたいに自分のメッセージと自分以外のメッセージの表示場所を変えたい

#はじめに
 現在作成中のチャットアプリのメッセージ画面をLINEのように自分の送ったメッセージは右、自分以外のメッセージは左に表示させよと一日苦戦した。ググってもあまり記事が見つからなかったので、ここに記録しておく。

##ポイントとして使ったもの

– renderメソッド
– if文
– deviseのメソッド

##コントローラー
“`ruby:messages_controller.rb
def index
@class_room = ClassRoom.find(params[:class_room_id])
@messages = @class_room.messages.includes(:user)
end
“`
`@class_room`にチャットルームをparamsから呼び出し代入
`@messages`にそのチャットルームのメッセージを全て入れる。
`.includes(:user)`はN+1問題を解消するため。

##ビュー

※divタブはコードが読みにくくなるため、ここでは割愛。

“`ruby
<% if message.us

元記事を表示

【Ruby】値渡しと参照渡し

## 「値渡し」「参照渡し」とは
関数やメソッドにおける引数の渡し方の種類を表す用語のこと。
Rubyだけではなくどのプログラミング言語でも共通する。

## 値渡し
– 実引数の値をコピーして仮引数に渡す
– コピーを渡すので、実引数には影響なし
– Rubyは値渡し(他の言語も)

## 参照渡し
– 実引数の変数があるメモリ上の場所(メモリ番地)をコピーして仮引数に渡す
– 与えられたメモリ番地から実引数の値を辿って値を変更する
– 仮引数に変更を加えると実引数も変更される

##参照の値渡し?
– 変数が参照(メモリ番地)を保持している場合、参照がコピーされる
– 「オブジェクトの参照(メモリ番地)」をコピーして実引数に渡すので、同じオブジェクトを共有しているということになる
– つまり、引数が指すオブジェクトを変更すると元の変数のオブジェクトも変更される
– あたかも「仮引数を変更したら実引数も変更された」ように見えるだけで、実際は値渡し
– 「変数を変更する」ことと「変数が指すオブジェクトを変更する」ことは別!

## 引用元
[値渡しと参照渡しの違いを理解する](http

元記事を表示

【Rubyによるデザインパターン】ストラテジーパターンのメモ

プログラムの設計力向上のため『Rubyによるデザインパターン』を読んでおり、気になるデザインパターンを、1つずつまとめていきます。

今回は、ストラテジーパターンについてまとめました。

## ストラテジーパターンについて
委譲をベースにした、複数の処理のバリエーションを実装するためのデザインパターンです。

継承を使いサブクラスごとにバリエーションを実装する実装するテンプレートメソッドパターンと異なり、ストラテジーパターンはバリエーションごとにばらばらのクラスを生成します。

## サンプルコード

趣味の筋トレにちなんでサンプルコードを書きます。
(テンプレートメソッドパターンの記事との類似した例を題材としています。)

ベンチプレスと懸垂はどちらもトレーニングの内容は同じものの、具体的な内容はそれぞれ異なっています。

そこで、トレーニングごとの内容を出力するプログラムを書きます。

ストラテジーパターン適用前はこのとおりです。

“`rb
class Training
def initialize(type)
@type = type
end

def s

元記事を表示

未経験のおっさんがプログラミングを学ぶまで

はいどうも!
某プログラミングスクールに通い始めた37歳のおっさんです。
プログラミングは完全に未経験。
そんなおっさんが転職するまでの軌跡(奇跡?)をぼちぼち綴っていこうと思います。

投稿は今日が初めてですがスクールは今日で9日目。
HTML&CSSをやってRubyに入り、Railsをやって試験を受けて、というところです。

簡単に私の経歴を
↪️
地方出身、東京の文系私立大学卒、東京で就職し営業職(toC & toB)でマネジメント経験あり。
インディーズですが学生時代にやっていたバンドでCDを1枚だけ出しています。
キャンプとジム通い、音楽掘りが趣味。
ジャンルはRock、JazzからEDMまで幅広く聴きます。
今はちょっと難しくなってしまいましたが海外旅行もそこそこ行きました。

なぜプログラミングを始めたのか、どうして転職を決意したのかなどは後々ゆっくりとupしていこうと思います。
とりあえずまだ始めたばかりですが感想としては
「めちゃくちゃやることがいっぱいある」
「勉強すること、覚えることが今までやってきたことの比じゃないレ

元記事を表示

【アウトプット】find_by メソッド

今回はfind_byについてアウトプットをしていく。

find_byはある特定のIDを取得すときに使われる。
3番目のIDのデータを取得するとか5番目とか

モデル名.find_by(カラム名: 値)と書くことでその値を持ったデータのデータベースから取得ができるようになる。

例)post = Post.find_by (id:3)
ちなみにpostはeachのときに使った変数

このようにして使われる。

変数paramsとよく使われる?らしいのでこれも併用して覚えるとGOOD

元記事を表示

LeetCodeをRubyで解く #1 [ Top Interview Questions, easy ]

GAFA等のコーディング試験対策としてよく使われている「LeetCode」をRubyで解きました。
まとまったRubyの解答例がなかったので、Top Interview Questionsの難易度easyで検索した46問についてまとめていきます。
# #1 Two Sum (Acceptance:45.9%)

問題

“`
配列numsと整数targetが与えられ、
異なる2つの要素の和がtargetと同値なる配列要素のインデックスを出力する

Example 1:
Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Output: Because nums[0] + nums[1] == 9, we return [0, 1].

Example 2:
Input: nums = [3,2,4], target = 6
Output: [1,2]

Example 3:
Input: nums = [3,3], target = 6
Output: [0,1]
“`

まず自分で書いてみた例です。
結果は`Time Limit

元記事を表示

混乱しがちなアソシエーションのclass_nameやforeign_keyを理解する

Railsでお知らせ機能やフォロー機能を実装しているとclass_nameやforeign_keyが出てくると思います。これらを理解するのに時間がかかったので、備忘録もかねて投稿します。

今回はお知らせ機能を例に挙げる。
イメージしやすいようER図を載せる。(最低限のカラムしか書いてません。)

![お知らせ機能ER図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/583698/31cc3e39-db27-39db-653d-e485bb4b87e5.png)

お知らせ機能を実装していると@user.passive_notificationsのようにして自分に来ている通知のレコードをまとめて取得したいことがある。そういう場合、下のように書く。

“`ruby:user.rb
has_many :passive_notifications, class_name: “Notification”, foreign_key: “visited_id”
“`

少し複雑なので、簡単な例を挙げる。

##

元記事を表示

Railsのユーザ入力情報の保護機能

本投稿の目的

・Rails学習の議事録です。

学習に使った教材

Udemyの [“はじめてのRuby on Rails入門-RubyとRailsを基礎から学びWebアプリケーションをネットに公開しよう”](https://www.udemy.com/course/the-ultimate-ruby-on-rails-bootcamp/) を教材として使用しました。

①Validates(バリデート)

・modelファイルに対して実施
・ユーザーが入力した値をdb保存する際の条件を指定できる
・Ex)空入力禁止,最大文字数10文字まで…

“`ruby:qiita.rb
def model名
validates :column名, 条件: 値の指定
end
“`

【解説】
○validates :column名
⇒条件を課したいcolumn名を記載

○条件: 値の指定
⇒実施したい制約に応じた記述法を記述
⇒以下に2つ例を記述する

・空入力禁止

“`ruby:qiita.rb
presenc

元記事を表示

logを確認しながらrakeタスクを実装して、対象appを指定して起動しよう(Heroku)

こんにちは、株式会社ベストティーチャーでサーバーサイドエンジニアとして働き出したばかりのタワラです。

業務ではじめて学んだTipsを紹介したいと思います。
今回は**rakeタスクを作成してHerokuで動作確認をする手順**です。

## Rakeタスクを実装する手順
###Tips1. ローカルでRakeタスクを作成する際には、Rails.loggerを活用する

こんな感じでコードを書いていたのですが、、、キャッシュを問い合わせるだけだから、これではログに何の情報も出ないな、動作確認はどうしよう、、、と思っているところ、、、

“`ruby
namespace :hogehoge do
desc “適当な説明をいれる”
task :foobar => :environment do
Rails.cache.fetch(‘hoge’)
end
end
“`
先輩「Rails.loggerを使うんだ!」
ボク「なるほど!」

“`ruby
namespace :hogehoge do
desc “適当な説明をいれる”
task :

元記事を表示

Railsを使ったToDoリストの作成(3.Railsの基本概念)

#概要
本記事は、初学者がRailsを使ってToDoリストを作成する過程を記したものです。
私と同じく初学者の方で、Railsのアウトプット段階でつまづいている方に向けて基礎の基礎を押さえた解説をしております。
抜け漏れや説明不足など多々あるとは思いますが、読んでくださった方にとって少しでも役に立つ記事であれば幸いです。

#環境
* `Homebrew: 2.5.10` -> MacOSのパッケージ管理ツール
* `ruby: 2.6.5p114` -> Ruby
* `Rails: 6.0.3.4` -> Rails
* `node: 14.3.0` -> Node.js
* `yarn: 1.22.10` -> JSのパッケージ管理ツール
* `Bundler: 2.1.4` -> gemのバージョン管理ツール

“`:iTerm
$ brew -v => Homebrew 2.5.10
$ ruby -v => ruby 2.6.5p114
$ rails -v => Rails 6.0.3.4
$ npm version => node: ‘14.3.0’
$ yarn –

元記事を表示

【Rails6.0】ポートフォリオに必須な「かんたんログイン」実装手順

# 概要

Railsでアプリを作成する際、deviseを用いてログイン機能を実装する方は多いかと思います。
中でも、“ポートフォリオには「かんたんログインをつけよう!」“と耳にした方も多いかと。

しかし、私の経験談として、“実装には結構苦労しました“。
理由としては、シンプルに“「devise関連で、知らなかったことをやる必要があったから」“です。

なので今回の記事では、

* deviseのコントローラをいじらなきゃいけないの?
* ルーティングはどうやって設定する?

このあたりを整理しつつ、「かんたんログイン実装手順」をアウトプットしたいと思います。

なお、この記事はこちらの素晴らしい記事を参考にしています。
YouTubeでの詳しい解説もありますので、ぜひ御覧ください。

Qiita | 簡単ログイン・ゲストログイン機能の実装方法(ポートフォリオ用)

# 環境

* macOS Catalina 10.

元記事を表示

[Rails]カテゴリー機能

# はじめに
アプリ開発において、ancestryというgemを用いてカテゴリー機能を加えたのでまとめました。

# 目次
1. カテゴリー選択・保存
2. カテゴリー検索表示
3. カテゴリー検索結果表示

# 1. カテゴリー選択・保存
![カテゴリー選択・保存](https://i.gyazo.com/863a3b34ce4bc36b38bb775ae3b8c916.gif)

### categoriesテーブルの作成
ancestryをインストールします。

“`ruby:gemfile
gem ‘ancestry’
“`

次にcategoryモデルを作成します。

##### ターミナル
“`
rails g model category
“`

has_ancestryを記述します。

“`ruby:app/models/category.rb
class Category < ApplicationRecord has_many :posts has_ancestry end ``` 以下のようにマイグレーションファイルに記述します。 indexに

元記事を表示

HTML.CSS.JavaScript.Ruby.Rails概要

#HTML
 HTML(Hyper Text Markup Language)とはWEBページを作成する際に使用されるマークアップ言語である。
 WEBページのほとんどにHTMLが使用されている。
 HTMLは**タグ**を使いコンピューターに命令を出す事により見出しを付けたり段落を付けたりと、WEBページのレイアウト、構成を形作ることができる。
#CSS
CSS(Cascading Style Sheets)は先ほどのHTMLと組み合わせて使用する言語である。
CSSは文字の色やサイズ、レイアウトを変えたり、WEBページを装飾する言語である。
HTMLでもWEBページの装飾をすることは出来るが、CSSの役割なので分けて使う必要がある。
#JavaScript
WEBサイトに動きをつけるためのプログラミング言語である。
具体的には文章や画像を拡大表示したり、より動的なWEBサイトを作ることができる。
サーバーを介さずにブラウザ上で動かすことができる。またこのようなプログラムをクライアントサイド・スクリプトという
#Ruby
Rubyとは日本人であるまつもとゆきひろ氏によって

元記事を表示

OTHERカテゴリの最新記事