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

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

Rspecの使い方備忘録

#はじめに
Ruby on Rails でポートフォリオ作成中に、現場でのテストはRspecでかかれることが多いと知ったので、自分なりに調べた使い方の概要をまとめておこうと思います。完全初心者が己の独断と偏見で理解していっているので、話半分程度で参考にしてください。

#Rspecの導入
数多のわかりやすい記事が転がっているので割愛します。factory_botも一緒に入れておきましょう。

#フォルダ構成
案外ここを記述してくれているサイトはありませんでした。私は以下の記事を参照しました。
https://qiita.com/shogo-1988/items/d19cd5068cdeb825176d

まとめると、基本的に以下のようなディレクトリ構成になるようです。

spec/models, requests, features, helpers, mailers, systems, …

ただし、これらはおおまかなもので、このあと書きますが実際には他のディレクトリも追加することになると思います。

現在私が使ったディレクトリについて、おおまかなテスト内容をまとめます。
・mo

元記事を表示

YouTube Data APIを使い過去にユーザーが高評価した動画を取得する

# 【Rails】YouTube Data APIを利用、OAuth2.0の認証を使い動画を取得

Ruby version 2.5.8
Rails version 6.1.1

rails new をした前提で話を進めます。自身がこのapiを使い認証機能を使い動画をviewに出すまでかなり苦労したので残しておきます。

### 完成イメージ
・過去に自身のアカウントで高評価した動画をviewに表示できている
・viewのデザインは皆さん適当に作ってみてください。私はyoutubeのデザインをもろパクリしました。
![スクリーンショット 2021-01-20 095147.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684396/82921232-6c75-5b3f-3176-ab821286bed6.png)

# この記事には7つのステップがあります
## 1 API keyの発行
[まず、apikeyを発行します。](https://console.cloud.google.com/apis/l

元記事を表示

webサーバー Pumaのアーキテクチャと内部実装を読む

# Pumaのアーキテクチャと内部実装を読む

インターン先のシステムがリプレースされるにあたり、アプリケーションサーバーが`unicorn`から`puma`に変更されることになったので、個人的にコードリーディングして得られた知見をまとめます。
社内文章として残すだけでは勿体無い気がしたので、初めてQiitaを投稿します。

今回扱うのは、Rails version5以降に標準搭載のWebサーバーである[Puma](https://github.com/puma/puma)の、現時点での最新版である5.1.1の内部アーキテクチャ・実装についてです。
(SingleモードでのPumaの挙動についてまとめており、バージョン5以降で実装されたClusterモードでのスリープソートなどの最適化実装は扱っていません)

## 前提
PumaはRack準拠のWebサーバーです。Rackとはruby製のアプリケーションフレームワークとWebサーバーのインターフェースに関する仕様で、これらがRackの仕様を満たしている限り任意に交換可能になります。
pumaはこのRackの仕様のうち、Webサーバー

元記事を表示

変数とif文

userが存在するかどうか判別が可能

“`terminal
> user = User.first
=> #

> if user
> puts “user exist”
> else
> puts “user don’t exist”
> end
user exist
=> nil

irb(main):012:0> user = nil
=> nil

> if user
> puts “user exist”
> else
> puts “user don’t exist”
> end
user dont exist
=> nil
“`
またuserのパスワードが“foobar“の場合
“authenticateメソッド“を使うことでパスワードと一致してるか検証可能

“`terminal
> user = User.first
=

元記事を表示

paranoia only_deletedメソッドのクセ

## 何が言いたいか
paranoiaが用意している`only_deleted`メソッドは便利そうに見えてクセがあるなと感じました。

## paranoia?
https://github.com/rubysherpas/paranoia
論理削除でおなじみのgem。
`acts_as_paranoid`とモデルに書くだけで、物理ではなく論理削除してくれるようになる。
(destroy!とかするとdeleted_atに値が入る)

## 事象
下記のようなテーブルがあるとします。
**Userモデル**

| id | name | age | deleted_at |
| — | — | — | — |
| 1 | けんじ | 5 | 2021-01-01 11:38:30
| 2 | たろう | 6 | null |
| 3 | じろう | 5 | null |

## 今回登場するメソッド
### with_deleted
論理削除されたレコードも取得できる
便利そう!

“`ruby
User.all
# => ID: 2, 3を取得できる
User.wit

元記事を表示

railsで実装した複数画像投稿機能で投稿された画像にswiperを適用させる

# 開発環境
Mac OS Catalina 10.15.7
ruby 2.6系
rails 6.0系

# 前提
アクティブストレージを用いた、複数枚画像投稿機能は実装済みとします。
投稿した複数の画像を、indexページなどで、swiperを用いて表示させることをゴールとします。
私が作っている写真投稿ができるアプリを例にしています。

# CDN読み込み

まずはCDNを読み込みます。
application.html.erb内のheadタグの中に下記のどちらかを追加しましょう。

“`application.html.erb

# どちらかをheadタグ内に記述 “`

下が最小限の機能で、上が全機能という違いがあります。

公式ドキュメントを全て読んだわけではないの

元記事を表示

FactoryBotについて

今回が初めての投稿になります、自分の中で理解できたことなどを書いていこうと思います。
今回はテストコードのFactoryBotについて書いていきます。
FactoryBotとは簡単にいうとインスタンスをまとめてくれるGemです。

テストコードを書いていて it “~”とexampleをかなりの量を書くことがあり、その度にテーブルの情報を変数に代入する記述を書くのはかなり大変なのでそれを改善するためにFactoryBotは用いられます。
これを用いるにはまず別のファイルで各クラスのインスタンスに定める値を設定しておき、各テストコードで使用していきます。

例えとしてあるユーザーの情報をインスタンス生成するとしたら
user = User.new(nickname: “A”, password: “qwer”)
このような記述を毎回書くのは非効率ですのでFactoryBotを利用します。すると
user = FactoryBot.build(:user)と短く書くことができます。ですがこれでも毎回書かないのでインスタンス変数を利用するとさらに記述量が少なくなります。
@user = Fa

元記事を表示

投稿機能の実装方法

#目次
①新規投稿ページに遷移可能にする
②データベースへ情報を登録可能にする

##①新規投稿ページに遷移可能にする
投稿ページに飛べるようにnewアクションを呼び出すために、newアクションへのルーティングを設定する。

“`
Rails.application.routes.draw do
resoureces :human , only:[:new]
end
“`
次にnewアクションを定義する

“`
class HumansContorller < ApplicationController def new end ``` そしてnew.html.erbに表示させたいようにビューを作成する。 form_withメソッドを使用すして、データの送信のビューを作成する ``` <%= form_with(model:モデルクラスのインスタンス) do |f| %>
<%= f.text_field :name ,placeholder:"niconicocareer" %>
<%= f.text_area :te

元記事を表示

rails newするときのoptionなにしたらええんやっけ?となったとき

“`rb
$ bundle exec rails help
Usage:
rails new APP_PATH [options]

Options:
[–skip-namespace], [–no-skip-namespace] # Skip namespace (affects only isolated applications)
-r, [–ruby=PATH] # Path to the Ruby binary of your choice
# Default: /Users/shoutaro/.rbenv/versions/2.7.2/bin/ruby
-m, [–template=TEMPLATE] # Path to some applicati

元記事を表示

railsのバリデーション

#バリデーションとは
正当性を実証(確認)すること。
例えば、新規登録フォームでユーザー名が入力されていなかったら登録できない、
メールアドレスが正規の型でない等を検知する。

#新規登録時に名前、メールアドレスが入力されているか検証する
app/models/user.rbファイルに記入する。
validatesメソッドに presence:trueという引数を与えて使うことで検証できます。

“`ruby:app/models/user.rb
class User < ApplicationRecord validates :name, presence: true validates :email, presence: true end ``` #長さを検証する 上記のコードにlenghtを追加します。 今回は名前を50文字、メールアドレスを255文字を制限とします。 ```ruby:app/models/user.rb class User < ApplicationRecord validates :name, presence: true, length

元記事を表示

モデルとテーブルについて

#目次
①モデルとは
②テーブルとは
②モデルの作成方法
④テーブルの作成・編集方法

##①モデルとは
MVCモデルの役割の一つ。データベースにアクセスすることができ、あらゆる情報に関する処理をすることができる。モデルがあることによって、データベースにあるテーブルも管理ができるようになる。各テーブルは各モデルに対応しており、モデルとにテーブルを管理できる。

##②テーブルとは
データベース内に作成されるデータを表形式で収納するもの。データベースに各用途におうじてテーブルが存在して、必要となればそのテーブルからデータを抽出することができる。

##③モデルの作成方法
“`
rails g model person
#モデルの作成、モデルは単数形
“`

##④テーブルの作成・編集方法
モデルを作成後、それに対応するテーブルは出来上がる。ただ、まっさらなテーブルの状態で、どのような情報を入れたいかなどの設計がなされていない状態である。それを設計するために、マイグレーションファイルに以下のように記述し、コマンドを実行するとテーブ

元記事を表示

コントローラについて

#目次
①コントローラとは
②コントローラの作成方法
③コントローラの削除方法
④コントローラの処理のカテゴリー

##①コントローラとは
MVCモデルの役割の一つ。リクエストに対する処理をまとめて用意しておき、ルーティングからリクエストを受け取って処理を行った後、クライアントにレスポンスを返す。またレスポンスに必要となるデータがあれば、他の役割と連携してデータを取得したり受け渡しを行い、レスポンスを完成させる。

##②コントローラの作成方法

“`
rails g controller コントローラ名
#コントローラを作成、コントローラは複数形
“`

##③コントローラの削除方法
“`
rails d controller コントローラ名
#コントローラを削除、コントローラは複数形
“`

##④コントローラの処理のカテゴリー
コントローラはリクエストに対応する処理を記述する場所。リクエストの処理はアクションと呼ばれ、主に7つのアクションがある。

|アクション名|何に対応するか|
|:–|:—:|–:|

元記事を表示

テーブルの内容を修正する方法

# rails db:rollbackの手順

マイグレーションを差し戻して、テーブルの内容を修正する。

必要な手順は以下の3ステップ

>ステップ1 `ロールバック`
>>ステップ2 `migrationファイルの修正`
>>>ステップ3 `再度migrationを実行`

# ステップ1
## rails db:rollbackコマンド

“`:ターミナル
% rails db:rollback
“`

`rails db:rollback`
カラム名を誤ってしまった場合などに、モデルに紐づくテーブルを作り直したいときに用いられるターミナルコマンド

>例: nameをnemeにしてしまった等

`「差し戻す」`と表現される

実行すると以下のような表示が出て差し戻される。

“`:ターミナル
== 20200315054113 CreatePosts: reverting ======================================
— drop_table(:posts)
-> 0.1939s
== 20200315054113 Creat

元記事を表示

アプリケーションの作成〜立ち上げ

#アプリケーション作成の流れ
①アプリケーションを保存するためのディレクトリを作成
②新規のrailsアプリケーションを作成
③データベースを作成
④アプリのケーションの立ち上げ

###①アプリケーションを保存するためのディレクトリを作成
ホームディレクトリから新規フォルダで適当な名前のディレクトリを作成する

###②新規のrailsアプリケーションを作成
“`
cd ①のディレクトリ
#①のディレクトリに移動する

rails railsのバージョン new Career_up -d mysql
#railsのバージョンを指定して、Career_upを作成

cd Career_up
#Career_upのディレクトリに移動する

pwd
#現在のディレクトリに移動
“`

###③データベースを作成

“`
rails db:create
#データベースを作成する
“`

###④アプリのケーションの立ち上げ

“`
cd Career_up
#Career_upのディレクトリに移動する

rails s
#C

元記事を表示

pramasについて

#目次
①paramsとは何か
②値はどのように送られてくるのか?
③どのように取り出すのか
④まとめ

###①paramsとは何か
送られてきた値を受け取るためのメソッドのこと

###②値はどのように送られてくるのか?
以下のコードはブラウザから入力されたデータを受け取るためのコードです。

“`
def create
Peroson.create(human_params)
end

def human_params
params.require(:human).permit(:text).merge(user_id:current_user.id)
end
“`

投稿作業を行った後、ターミナルを見てみると

“`
Parameters: {“authenticity_token”=>”MgJJR92h/eFO7aQ+4YMt4y2tY6kPAxD1KaiVccrRxcuK4342o8v7bNpMV0SQgmmIZW8WZA4ik/UwxLVLyT5NSA==”, “hum

元記事を表示

Model.human_attribute_name(:カラム名)について(Rails)

# 経緯
普段viewでよく見かけるタイトルについて自分の学習用のメモ的な感じです。

#Model.human_attribute_name(:カラム名)とは?
ActiveRecord::Base のクラスメソッドで内部的にI18nモジュールを
利用してくれるというものです
参照先は config/locales/ja.ymlです。

“`ja.yml

ja:
activerecord:
errors:
messages:
record_invalid: ‘バリデーションに失敗しました: %{errors}’
restrict_dependent_destroy:
has_one: “%{record}が存在しているので削除できません”
has_many: “%{record}が存在しているので削除できません”
models:
task: タスク
attributes:
task:
id: ID
nam

元記事を表示

Docker開発環境

#はじめに
現在開発中のアプリにDockerを導入したのでアウトプットします。

#環境
Ruby on Rails ‘6.0.0’
Ruby ‘2.6.5’
MySQL ‘5.6.47’

# Dockerfile
開発中アプリのルートディレクトリにDockerfileを作成します。

“`ruby:Dockerfile
FROM ruby:2.6.5

RUN apt-get update -qq && \
apt-get install -y build-essential \
libpq-dev \
nodejs

RUN mkdir /アプリ名
WORKDIR /アプリ名

ADD ./Gemfile /アプリ名/Gemfile
ADD ./Gemfile.lock /live_search/Gemfile.lock

RUN gem install bundler
RUN bundle install
ADD . /アプリ名
“`

# docker-compose

元記事を表示

【Ruby】レシーバのないメソッド

Rubyにおいてレシーバのないメソッドでは、暗に`self`をレシーバとしているらしい。

“`ruby
puts “hello”
# => hello
“`

は下の文と等しい。

“`ruby
self.puts “hello”
# => hello
“`

トップレベルでの`self`は`main`という名前のObjectクラスのインスタンスであり、
ObjectクラスはKernelモジュールをincludeしている。
Kernelモジュールにputsメソッドが定義されているため、トップレベルでputsが使えるということらしい。

#### 参考

[【Ruby】メソッドの前のレシーバがない(ように見える)場合の考え方)](https://qiita.com/akihiro_kubota/items/de7d78204257a3ffa5f9)

[プロを目指す人のためのRuby入門](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%E4%BA%BA%E3%81%

元記事を表示

Ruby初心者向けプログラミング問題10選を解いてみた(下)

[Ruby初心者向けプログラミング問題10選を解いてみた(上)](https://qiita.com/porryanes/items/525e3ef5b4a7e40699fc)の続きです
引き続き自分の回答を貼っていきますが、2問解けてないです(へなちょこ)

# 素晴らしき元サイト様
[アウトプットのネタに困ったらこれ!?Ruby初心者向けのプログラミング問題を集めてみた(全10問)](https://blog.jnito.com/entry/2019/05/03/121235)

# 国民の祝日.csv パースプログラム (回答無し)
## 問題文

問題文(折りたたみ)
>その昔、「国民の祝日.csv」という扱いづらいCSVが話題になっていました。
具体的にはこんなCSVファイルです↓
>
“`
平成28年(2016年),,平成29年(2017年),,平成30年(2018年),
名称,月日,名称,月日,名称,月日
元日,2016/1/1,元日,2017/1/1,元日,2018/1/1
成人の日,2016/1/11,

元記事を表示

Sinatraでデータを修正、更新する(CRUDのUpdate機能)

Rubyでシステムを構築する際に、Railsだとちょっとボリュームが多いので、そんな場合は軽量フレームワークとしてSinatra(PythonのFlaskみたいなもの)というものがあります。

そして、色々と使い方を解説したページや記事もあるのですが、なぜかデータの修正、更新機能については触れていないことが多く、それではどうやって作るのかをひたすら調べ、ようやく解決したので、備忘録として置いておきます。

まずは、この記事(自分とは別人です)のように登録機能と削除機能を作ってみてください。自分の記事はそこから補足説明となります。

– [sinatraでの最小限のアプリを作る](https://qiita.com/yukihigasi/items/284418046b8aac55d05b)

## なぜ、データ修正機能の記事が少ないのか?
日本語サイトでもほとんど見つからなかった上に、MVCの観点を鑑みて、全ての機能を懇切丁寧に解説しているものは皆無だったので、英語サイトも隈なく探してみたのですが、そういったサイトは見つかりませんでした(この記事を作ろうとしたきっかけです)。

その理

元記事を表示

OTHERカテゴリの最新記事