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

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

slimを使うとき

## slimの書き方

サンプル

“`slim
/ SLIM
doctype html
css:
h3{color:blue}
h3 何かしら入力
p 表示できる
“`

ターミナルでの実行の仕方

“`ターミナル
rake

slimrb -p 1115.slim > 1115.html
“`

もしくは、エクスプローラーの窓に

“`
cmd /c rake
“`

と入力すると一発で出来る。

これはrakeをインストールしてたり、簡単に作成できるrakefileを作っている前提での話。

元記事を表示

バイナリーサーチを利用して要素を検索する

調べたことを整理して落とし込めるためにまとめます。
Rubyを使用しています。

## バイナリーサーチとは
データの検索をする際に用いられる手法のことを言います。

* ソート済みのデータ
* 同一の値が存在しない配列に入ったデータ

などが対象です。

検索したい値 = A
リストの中央に位置する値 = B 
を用意し、AがBより大きければリストの左側にある値を検索対象から除外します。
これを繰り返すことで検索にかかるコストを減らすことができます。

## 実際に書いたコード
“`ruby
def binary_search(array, num)
first = 0
last = array.length – 1

while first <= last center = (first + last) / 2 if num == array[center] return puts "#{num}は配列の#{center}番目に存在します" elsif num > array[center]
first = cen

元記事を表示

個人ブログのスパム対策に関して(Rails)

## 概要
先日、Railsで開発した個人ブログを公開しました。
– [Niken log](https://nikenlog.com/)
– [サービス概要](https://nikenlog.com/blogs/16)

その公開に伴いGoogleのサーチコンソールに登録したは良いものの、問い合わせフォームに、RichardcenceさんやGeorgewetさんなど知らない外国人から「登録したら〇〇ドルもらえる!」というスパムが大量に届いたため、その対策として行ったことを簡単にまとめます。

![スクリーンショット 2021-11-19 14.57.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/425582/6b198bfc-f1cd-8099-7a1c-7647633ca775.png)

## 1. URLのバリデーション
早急にbot等でのスパムメールを送れないようにするため、まず初めに問い合わせフォームの本文にURLのバリデーションを設定しました。

“`model.rb

## U

元記事を表示

新規Railsアプリケーションの雛形作成〜データベース作成まで

# 新規Railsアプリケーション雛形作成
railsをPCにインストールしている前提で説明していきます。
今回、Railsのバージョンは6.0.0を使用。
データベース管理システムはmysqlを使用します。

ターミナル

“`
# アプリケーションを入れたいディレクトリに移動
% cd ~/〇〇〇〇(ディレクトリ名)

# Railsアプリケーションで用いる仕組みの一部を設定するコマンドを実行
% bundle config –global build.mysql2 –with-opt-dir=”$(brew –prefix openssl@1.1)”

# Railsのバージョン6.0.0を用いて、新しいAppを作成(〇の箇所には好きなアプリ名を入れる
% rails _6.0.0_ new 〇〇〇〇_app -d mysql

# 「〇〇〇〇_app」ディレクトリに移動
% cd 〇〇〇〇_app

“`

上記の操作を行って、
/Users/ユーザー名/指定したディレクトリ名/指定したアプリ名
と表示されれば作成完了です。

# データベース作成
ターミナル

元記事を表示

スクールを卒業してrails tutorialをやると大体テストでつまづく(Minitest)

はじめましてプログラミングスクールを卒業して現在転職活動中の27歳です。
スクールのカリキュラムが終了して復習のつもりでrails tutorialをやり出したらなんだか初めてみることが結構出てきて困惑している27歳です。

前置きは半分冗談で半分本音なところもございまして、スクールではテストの書き方をほとんど教わっていなかったのでrails tutorialで初めて見るテストコードに結構苦戦しました。僕みたいな人が他にいるような気がすると思い初qiita投稿はrails tutorialに出てきたテストコードをピックアップして解説していけたらなと思っております。

#読んで欲しい人
・Railsはある程度わかるけどテストを書いたことがない人
・テストの文法がいまいち分からない人
・スクール卒でポートフォリオにテストを追加したい人

##現時点で自分が思っているテストの書き方

①とりあえずテストしたい場所にアクセスする or テストしたい値を記述する(変数に代入する)

②その場所、その値で検証したいことをassert ~~~~で検証する

##基本のテスト(テストしたい場所にアク

元記事を表示

【RSpec】APIテストでformat: :json

##環境
Ruby 3.0.2
Rails 6.1.4.1

“`routes.rb“`で“`format: :json“`指定しておくと、
APIテストの方で省略できる。

“`config/routes.rb
Rails.application.routes.draw do
namespace :api, format: ‘json’ do
resources :users
end
end
“`

“`spec.rb
get api_v1_abc_path(format: :json)

#↓

get ‘/api/v1/abc’
“`

##参考

https://qiita.com/kat0/items/be6114fb4694b9576304

元記事を表示

【RSpec】Doorkeeperを使用したAPIのリクエストテスト

doorkeeperのgemを使用していて、リクエストテストでアクセストークンが必要な場合のやり方

##環境
Ruby 3.0.2
Rails 6.1.4.1

##Factoryの作成
アクセストークンをFactoryで擬似的に作成。
factories下に“`applications.rb“`と“`access_tokens.rb“`を作成

“`spec/factories/doorkeeper/applications.rb
FactoryBot.define do
factory :doorkeeper_application, class: ‘Doorkeeper::Application’ do
sequence(:name) { |n| “Application #{n}” }
redirect_uri { ‘https://アプリのURI/callback’ }
end
end
“`

“`spec/factories/doorkeeper/access_tokens.rb
FactoryBot.define do
fac

元記事を表示

FactoryBot のまとめ

## **FactoryBot とは**

factory_bot_rails といった gem を導入することで使える。

→ model のデータに紐づいたテストデータを簡単に作るためのもの。

spec 配下の factories の中に定義する。

各モデルのファイルを作成して、カラムに基づくデータを Faker を使って定義する。

> Faker とは… ダミーデータを作るのに便利な gem のこと。
>

**定義したデータをテストの際などで呼び出すことが可能になる!**

## **FactoryBot の定義の仕方**

`FactoryBot.define`を`do 〜 end` の中で定義するような書き方をする。

作成例)

“`ruby
FactoryBot.define do
factory :article do
title { Faker::Lorem.word }
body { Faker::Lorem.sentence }
end
end
“`

上記のような書き方だと、
title カラムでは、`Faker::Lor

元記事を表示

【jbuilder】部分テンプレートのオプション

##環境
Ruby 3.0.2
Rails 6.1.4.1

##部分テンプレート

部分テンプレート内で呼び出し方を“`as“`で指定
2つとも同じように取れる

“`app/views/users/index.json.jbuilder
json.partial! ‘users/user’, collection: @users, as: :user

#or

json.array! @users, partial: ‘users/user’, as: :user
“`

“`app/views/users/_user.json.jbuilder
json.extract! user, :id, :name, :age
“`

##参考

https://github.com/rails/jbuilder

元記事を表示

【Rails】IN句の書き方

IN句の書き方いろいろ

“`ruby
User.where(id: [1, 3, 6])
#=> SELECT `users`.* FROM `users` WHERE `users`.`id` IN (‘1’, ‘3’, ‘6’)
“`

“`ruby
ids = [1, 3, 6]
User.where(‘id IN (?)’, ids)
#=> SELECT `users`.* FROM `users` WHERE (id IN (1, 3, 6))
“`

“`ruby
User.where(‘id IN (?)’, [1, 3, 6])
#=> SELECT `users`.* FROM `users` WHERE (id IN (1, 3, 6))
“`

“`ruby
User.where(‘id IN (1, 3, 6)’)
#=> SELECT `users`.* FROM `users` WHERE (id IN (1, 3, 6))
“`

元記事を表示

【Rails】Routingのネスト,member, collectionの違い

###はじめに
Railsでアプリケーション作成しております。
作成中にルーティングについて少々学習したので、自分用のメモとして残しておきます。

###ルーティングについて
ルーティングは、受け取ったHTTPリクエストに応じて、特定のコントローラー内のアクションを動作するように割り当てを行なっている。
Railsのルーティングは`config/routes.rb`で設定する。

“`ruby:config/routes.rb
Rails.application.routes.draw do
# ここにルーティングを設定する
root ‘home#index’
end

“`

設定したルーティングは、以下のコマンドを実行することで確認できます。

“`:ターミナル
$ bin/rails routes

Prefix Verb URI Pattern Controller#Action
root GET / home#index
“`
###実装したかったこと(前提)
ユーザー(user)が、ある施設(house)に口

元記事を表示

【Rails】SQLでor検索

A OR Bの結果が出力される。

“`ruby
User.where(name: ‘コナン’)
.or(User.where(email: ‘ran@gmail.com’))
#=> SELECT `users`.* FROM `users` WHERE (`users`.`name` = ‘コナン’ OR `users`.`email` = ‘ran@gmail.com’)
“`

orメソッドがまだなかったときはこんな書き方をよく見かけたらしい。

“`ruby
User.where(“name = ? OR email = ?”, ‘コナン’, ‘ran@gmail.com’)
#=> SELECT `users`.* FROM `users` WHERE (name = ‘コナン’ OR email = ‘ran@gmail.com’)
“`

元記事を表示

【Rails】複数レコード一括保存のRspecの書き方

https://ryucoding.com/programming/rails-form-bulk-create
で紹介されている複数レコードを一括保存するcreateアクションをテストするリクエストspecの書き方で詰まったのでその備忘録です。

#テスト対象のコントローラーとアクション

“`
//questions_controller
def create
@form = Form::QuestionCollection.new(question_collection_params)
if @form.save
redirect_to root_url
else
render ‘new’
end
end
.
.
.
.
.

def question_collection_params
params.require(:form_question_collection).permit(questions_attributes: [:content, :mode_num])
end

“`
クイズ出題ア

元記事を表示

【Rails】左外部結合と内部結合

##環境
Ruby 3.0.2
Rails 6.1.4.1

##前提条件
“`ruby
class Owner < ActiveRecord::Base has_many :dogs end class Dog < ActiveRecord::Base belongs_to :owner end ``` ##左外部結合 左側のテーブルにしかないレコードも取得して結合する。 下の例でいうと、飼犬がいないオーナーのデータも取得できる。 ```ruby Owner.left_joins(:dogs) => SELECT `owners`.* FROM `owners` LEFT OUTER JOIN `dogs` ON `dogs`.`owner_id` = `owners`.`id`
“`

##内部結合
結合条件に一致するレコードのみを結合する。
下の例でいうと、飼犬がいるオーナーのデータのみ取得できる。

“`ruby
Owner.joins(:dogs)
=> SELECT `owners`.* FROM `owners` INNER JOIN `do

元記事を表示

「Ruby」where文で同じカラムで複数指定する方法

#where文で配列を同じカラムで複数指定する方法

変更前

“`
@q = Tweet.where(completed: “0”)
“`
変更後

“`
@q = where(completed: [‘0’, ‘1’])
“`
このように配列にすれば指定できる。

元記事を表示

【しくじり先生】失敗続きの未経験からのエンジニア転職1年間を振り返って最短で満足のいく転職をするにはどうすれば良いかを考えてみた

# はじめに
こんにちは、28歳未経験から12月より150名規模の自社開発企業で働くことになったもきおです。エンジニア転職を目指し2020年10月に前職を辞め、早1年も経ってしまいました。
仕事をしていながらなら分かるが学習にコミットして流石に一年は長かった。

1年間色々と細かい失敗を繰り返し続けました。でも失敗ばかりだったから伝えられることも多くあると思うんです。そこで今回は今までの流れを振り返りつつ、失敗から何を学びどのようにすればもっと早く満足のいくエンジニア転職ができるかを考えてみました。

書きたいことが多く結構なボリュームになってしまいましたが最後までご覧いただけますと幸いです。

# こんな人に読んで欲しい
・プログラミングスクールからエンジニア転職を目指している方
・独学からエンジニア転職を目指している方
・エンジニア転職活動をしている方
・これからプログラミングを学んでエンジニア転職を考えている方

#今までの流れ
まず初めに「おいもきお、一年も何やってたんだよ」と声が聞こえてきそうなので今までの流れをざっと表で振り返っていきます。

|期間|やったこと|
|–

元記事を表示

インチキをしてRailsでExcelを読み書きする

## Excel大好きな人達

多くの案件ではExcel好きなプロパーとかExcel好きなプロパーとかExcel好きなプロパーが跋扈しており、確固たる理由はないがなんとなく「Excelライクで」とか言われることが非常に多いと感じています。
Excelライクと言わないまでも、Excelをアップロードできたりダウンロードできたりと言った要件は、非常にカジュアルに生じています。

「DXの意味わかっているの?」と言いたくなるのですが、これが原状なのでしょうがありません。

## Railsライブラリの限界
ただ、Railsエンジニアなら一度は経験したことがあると思うのですが、RailsにはExcelをうまく扱えるライブラリがあまりありません。

|ライブラリ|機能|注記|
|-|-|-|
|Axlsx|新規作成から書き出しだけ|新規作成のみで、テンプレートファイルからの新規作成もできない。複雑なワークシートを作ろうと思うと、コードが恐ろしく読みにくくなる|
|Roo|読み込みだけ|読み込み専用|
|RubyXL|読み書き可能|数少ない読み書き可能なライブラリだが、`parse`が恐ろしく遅い

元記事を表示

Rails 6.0 + Docker + MySQL5x + devise-token-auth での環境構築

## この記事の概要
– RailsのAPIモードで認証周り作ったときに苦労したので、備忘録メモとして…。

## 成果物
– GitHub: [try-rails6-api-with-devise](https://github.com/Nunnally-Engr/try-rails6-api-with-devise)

## 各種バージョン

– Ruby 2.7
– Rails 6.0.0
– mysql 5.7.21

## 前提条件

– Dockerを使える環境が整っていること

## できること

– Rails 6.0 + Docker + MySQL5x + devise-token-auth での環境構築
– devise-token-authを使った、サインアップ、サインイン、サインアウトができる
– ユーザがサインインしていることを確認し、サインインしていたらuser情報を取得する

## できないこと(やらないこと)

– コピペで環境構築できるように作った記事なので、各項目の詳しい説明は割愛

## 環境構築

元記事を表示

【Ruby】早期return

##早期リターン
式の値を戻り値としてメソッドの実行を終了。式が省略された場合には nil を戻り値とする。
条件分岐のネストが深くなりすぎてコードを読みにくくなってしまうときに使用すると可読性が高まる。
「Guard Clause」「ガード節」「ガード条件」「ガード構文」と呼ばれることもある。

“`ruby
def invalid_permission?(user)
if user.present? #<= この例外処理はGuard Clauseで書き直せる case user.permission when 1,2,3 false else true end else true end end ``` ```ruby def invalid_permission?(user) return true if user.blank? #<= この1行で例外チェックをネストなしで完了できる case user.permission when 1,2,3 false else

元記事を表示

【Rails】global source linesとは何か

##global source lines 
Gemfileに記述されるgemに対してsource、git、pathのオプションを指定しなければ、Gemfileの一行目にある引数のサイトから取得される。

“`ruby
source “https://rubygems.org”
“`

このsourceメソッドの行はマニュアル内で global source lines と呼ばれる事がある。

###sourceオプション 
gemを検索するサイトを取得

“`ruby
gem “gem_name”, source: “url”

#全てのオプションで、ブロックを用いて一括で書ける
source ‘url’ do
gem ‘gem_name1’
gem ‘gem_name2’
end
“`

####pathオプション 
ファイルシステム内のパスを指定し、gemの取得先とする

“`ruby
gem “gem_name”, path: “url”
“`

###gitオプション 
作成されたgemのgitリポジトリから取得

“`ruby
gem “gem_nam

元記事を表示

OTHERカテゴリの最新記事