Ruby関連のことを調べてみた2022年01月07日

Ruby関連のことを調べてみた2022年01月07日

[Ruby]stringクラスのscanメソッド

学習したことのアウトプットとして

# scanメソッドとは
Ruby本体に組み込まれているライブラリで、 require を書かなくても使うことが可能。
対象の要素(stringクラス)から引数で指定した文字列を数え、配列として返すメソッドです。
正規表現で括弧を含む場合は、括弧で括られたパターンにマッチした部分文字列の**配列の配列**を返します。

(例)

“`ruby
“foobar”.scan(/../) # => [“fo”, “ob”, “ar”]
“foobar”.scan(“o”) # => [“o”, “o”]
“foobarbazfoobarbaz”.scan(/ba./) # => [“bar”, “baz”, “bar”, “baz”]

“foobar”.scan(/(.)/) # => [[“f”], [“o”], [“o”], [“b”], [“a”], [“r”]]
“foobarbazfoobarbaz”.scan(/(ba)(.)/) # => [[“ba”, “r”], [“ba”, “z”], [“ba”, “r

元記事を表示

【Ruby】繰り返し② timesメソッド

※初心者向け
※アウトプット練習の為

開発環境
rails 6.1.4.1
ruby 2.6.5

##問題内容##
1〜10までの数値を順番に足し合わせて、最後に全て足した結果をターミナルに出力するプログラムを書いてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2451862/46f590bf-1900-da13-522f-fc6139f48273.png)

**条件**:必ずtimesメソッドを使ってください。以下のようなプログラムはNGです。
**NGなプログラムの例**

“`csharp
sum = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10
“`

##解答##

“`csharp
sum = 0

10.times do |i|
sum = sum + i + 1
end

puts sum

“`
もしくは自己代入演算子+=を使って

“`csharp
sum = 0

10.times do |i|

元記事を表示

[py2rb] re.match re.search

# はじめに
移植やってます。
# re.match re.search (Python)
“`python
import re
print(re.match(r’aaa’, ‘aaab’))
print(re.match(r’aaa’, ‘baaa’))
print(re.search(r’aaa’, ‘aaab’))
print(re.search(r’aaa’, ‘baaa’))


None


“`
`re.match`は先頭からのマッチになります。
こちらの記事が分かりやすい。

https://qiita.com/halhorn/items/9e6599a3422e7dd94ec8
# match (Ruby)
“`ruby
p ‘aaab’.match(/^aaa/)
p ‘baaa’.match(/^aaa/

元記事を表示

【Rails】Controllerの主な仕事内容

##Controllerの仕事内容
・Modelとのやり取りを行う。
・Viewに渡すインスタンス変数を定義する。
・表示するViewファイルを指定する。

元記事を表示

[py2rb] re.sub

# はじめに
移植やってます。
# re.sub (Python)
“`python
import re
s = ‘1A2B3C’
print(re.sub(r'[A-Z]’, ”, s))
print(re.sub(r'[A-Z]’, ”, s, count=1))

# 123
# 12B3C
“`
正規表現で一致した文字列を置換します。
`count`オプションで置換する回数を指定できます。
https://docs.python.org/ja/3.7/library/re.html#re.sub
# gsub (Ruby)
“`ruby
s = ‘1A2B3C’
puts s.gsub(/[A-Z]/, ”)
puts s.sub(/[A-Z]/, ”)

# 123
# 12B3C
“`
`Ruby`の場合、すべて置換する`gsub`/`gsub!`と最初に一致する文字列を置換する`sub`/`sub!`があります。

https://docs.ruby-lang.org/ja/latest/method/String/i/gsub.html

https:/

元記事を表示

GETとPOSTについて

##HTTPメソッドが「GET」になるのはどんな時?
・アドレスバーにURLを入力した時。
・google検索で出てきたサイトをクリックした時。

##HTTPメソッドが「POST」になるのはどんな時?
・会員登録をする時。
・ブログの投稿を行う時。

###GET=サイトの表示を得る(GET)のがGETリクエスト
###POST=データの送信をする(POST)のがPOSTリクエスト

元記事を表示

Rspecでsubjectに関数を指定し、何度も呼び出す方法

## subjectは記憶力が良い

subjectは記憶されるので、普通に書くと何度も呼び出すことは出来ません。

つまり、以下のようなテストは通らないということです。

“`rb
def increment
@i ||= 0
@i += 1
end

describe “increment” do
subject { increment }

it “increments i” do
expect(subject).to eq 1
expect(subject).to eq 2
end
end
“`

## Procを覚えてもらう

`proc`で囲ってあげましょう。
呼び出すときの`.call`も忘れずに。

“`rb
def increment
@i ||= 0
@i += 1
end

describe “increment” do
subject { proc { increment } }

it “increments i” do
expect(subject.call).to eq 1
expe

元記事を表示

【Ruby】繰り返し処理 times文

※初心者向け
※アウトプット練習の為

開発環境
rails 6.1.4.1
ruby 2.6.5

##問題内容##
times文を使って、以下のようにターミナルに出力されるプログラムを書いてください。

**ターミナル**

“`
1回目の繰り返し
2回目の繰り返し
3回目の繰り返し
4回目の繰り返し
5回目の繰り返し
6回目の繰り返し
7回目の繰り返し
8回目の繰り返し
9回目の繰り返し
10回目の繰り返し
“`

##解答##
“`csharp
10.times do |i|
puts “#{i + 1}回目の繰り返し”
end
“`

##解説##
times文を使えば、何度も繰り返される同じ処理をまとめることができます。今回まとめられるのは◯回目の繰り返しとターミナルに出力する部分です。

times文は繰り返したい回数.timesと記載して繰り返す数を決めます。今回は10回繰り返すので10.timesとなります。

“`csharp
10.times
end

“`

10.timesとendの間に、◯回目の繰り返しとターミナルに出力する処理を記述します

元記事を表示

【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ブックマーク(いいね)」しか付けることしか出来ず、**早い者勝ちで一番最初に誰かがブックマーク(いいね)をしたら、それ以上その投稿

元記事を表示

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

元記事を表示

【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

元記事を表示

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

元記事を表示

【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」がテーブルに付与される。

元記事を表示

Ruby 配列で重複した項目のみを取り出す

“`ruby
arr = [1, 2, 3, 2, 4, 1]

arr.group_by{ |i| i }.reject{ |k,v| v.one? }.keys.sort
=> [1, 2]
“`

お好みで countするパターン

“`ruby
arr.map{ |i| arr.count(i) }.uniq.sort
=> [2, 1]
“`

※こちらの記事は自ブログからの転載です

https://akinov.hatenablog.com/entry/2022/01/06/124959

元記事を表示

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 # ユーザー自身の投稿のみ削除可能にするための条件分岐等を行ったほうが

元記事を表示

OTHERカテゴリの最新記事