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

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

【Rails】whereの戻り値に気を付けようという話

## はじめに
#### なぜ書いたか
– whereやpluckの戻り値を理解しておらず、詰まった経験を共有します
– 「`.id`でいけるだろ」と、ActiveRecordを乱用してしまうことに反省の意味を込めて

#### 結論
– whereやpluckの戻り値は配列である
– ActiveRecordのメソッドチェインの使い所を理解しよう

## 前提
#### 環境
・ Ruby 2.6.5
・ Rails 6.0.3
・ devise(userモデル)を使用
#### ER図
![スクリーンショット 2020-11-08 18.04.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/708469/2a6cc9b7-29af-7310-7992-428ec062994a.png)

roomsテーブル: DMする部屋を管理します
user_roomsテーブル: userとroomの組み合わせを管理します

#### やりたいこと

![スクリーンショット 2020-11-08 16.44

元記事を表示

System SpecとFeature Specは何が違うの?

新しいRailsプロジェクトに取り組む際に、テストもしっかり書こうと思い調べたことをまとめます。

## System SpecとFeature Specの違い

どちらもRSpecで提供されているE2Eテスト機能です。
Feature Specのほうが歴史が長く、古いバージョンのRailsプロジェクトではこちらがよく使われていると思います。

Rails5.1で`SystemTestCase`という新しいテストケースクラスが導入され、これをラップした (使えるようにした) System SpecがRSpecでも導入されました。
[RSpecリリース](https://rspec.info/ja/blog/2017/10/rspec-3-7-has-been-released/)

結果として両者が共存している状態ですが、公式READMEではSystem Specが推奨、Feature Specは引き続きサポートしていくことが表明されています。

> Before Rails introduced system testing facilities, feature specs we

元記事を表示

[Rails]モデルのバリデーション「lengthチェック」の閾値はテーブル情報から動的に取得しよう

下記のusersテーブルがあるとします。

“`console
mysql> desc users;
+—————————–+————-+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+—————————–+————-+——+—–+———+—————-+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| name | varchar(100)| NO | | NULL | |
| created_at

元記事を表示

Railsでよく使うGem

TL; DR

(まだかきかけ)
私がRailsでよく使うGemをメモしました。
一番良く使っているRailsのバージョンは5.2.xです。

* config (Environmentごとの設定をYAMLで記述する)
* haml-rails (ビューの記述言語としてHamlを利用する)
* boostrap (CSSフレームワークのBootstrap)
* font-awesome-sass (FontAwesomeを使う)
* activerecord-session_store (RailsのセッションをActiveRecordに保存する)
* gretel (パンくずリストの管理)
* enum_help (enumのI18N化)
* rails-i18n (各国語用のロケールデータ)
* auto_strip_attributes (ActiveRecordのattributesの文字列をstripしたり、nilにしたり)
* email_validator (メールアドレスのvalidation)
* whenever (crontabにスケジュールを書き込む。Capis

元記事を表示

Leet文字列(ruby編)

#Leet文字列(ruby編)
#先に言っておくと、期待通りの出力ができなかったので分かる方教えて頂けると嬉しいです?
#問題
Leet ではいくつかのアルファベットをよく似た形の他の文字に置き換えて表記します。 Leet の置き換え規則はたくさんありますが、ここでは次の置き換え規則のみを考えましょう。
置き換え前 置き換え後
A 8
E 3
G 6
I 1
O 0
S 5
Z 2

文字列が入力されるので、これを Leet に変換して出力するプログラムを書いてください。
#入力される値
入力は以下のフォーマットで与えられます。
i
i は Leet に変換する前の文字列を表します。
#期待する出力
i を Leet に変換した文字列を1行に出力してください。
#入力例1
APPLE
#出力例1
8PPL3
#私の答え(誤った答えです)
“`java:ruby
array = {
“A” => “8”,
“E” => “3”,
“G” => “6”,
“I” => “1”,
“O” => “0”,
“S” => “5”,
“Z” => “2”
}
str = gets.gsub(/[

元記事を表示

Rails6でRatyを使用して星評価機能を実装する

rails6でratyを使用して星での評価機能を実装。

まず、Jqueryを入れる
https://qiita.com/masahisa/items/eaacb0c3b82f4a11fc13

これを参考にjqueryを導入してください。
rails6になり、
$ yarn add jquery の記述が忘れがちなので注意が必要です。

githubから星imageを保存
https://github.com/wbotelhos/raty/tree/master/lib/images
これを app/assets/imagesに保存。

同じくgithubからjavascriptコードをコピー
rails6では app/assets/javascripts というフォルダがないので、
app/assets に javascriptsというフォルダを作成。
配下にaplication.jsファイルも作成、そこにgithubからコピーしたコードを全て貼り付け。

app/assets/config/manifest.jsに

//= link_directory ../javascri

元記事を表示

既存のRailsアプリのローカル環境にDockerを導入する方法【Rails6 / MySQL8】

# はじめに

本記事は私が既存のポートフォリオアプリのローカル環境に`Docker`を導入した際の手順になります。
`Docker`の公式ドキュメントは`PostgreSQL`での手順解説になっているため`MySQL`になると公式ドキュメントの手順解説はなく、
また、`Rails6`での情報も`Rails5`と比べるとやはり少なく、結果、`Rails6`+`MySQL`という組み合わせでの情報がとても少なかったです。
そのため、私自身様々なエラーが出て試行錯誤しましたので、本記事がこれから`Rails6`+`MySQL`という組み合わせで`Docker`を導入する方の助けになれば幸いです。
なお、筆者は就職活動中の実務未経験の初学者のため、誤っている点などあるかもしれません。
その際はコメントにて教えて頂けると幸いです。

# 前提条件
+ `Mac版 DockerDesktop`のインストールが完了していること
+ `Docker`が起動済みであること

※筆者の場合、上記インストールと起動は[「ゼロからはじめるDockerによるアプリケーション実行環境構築」](https

元記事を表示

【Ruby】メソッドの引数の個数についての疑問と検証

## 背景

“`ruby
method1 a b, c
“`
となっている場合、cはどのメソッドの引数になっているでしょうか?

Ruby ってメソッドの引数にカンマやカッコをつけなくても良いのです。
ただ、このシステムの場合、不具合が起こると思うのです。
そこで、今回はそれを実際に試してみて検証しました。
下記の疑問について、なかなか記事がなくて不思議に思っていました。

## 問題がありそうな場面 

例えば、

* パターン1

“`ruby
method1 a, b
“`

“`ruby
method1(a, b)
“`
という意味ですよね(methodって名前でメソッドを定義しようとしたらエラーになったので、method1としています。。)。

* パターン2

“`ruby
method1 a b
“`

“`ruby
method1(a(b))
“`
という意味ですよね。
ここまでは良いです(この時点で既にちょっと違和感がありますが。。初心者にはきついです。。)

## ここで疑問

“`ruby
method1 a b, c
“`
って

元記事を表示

Ruby on Rails 基礎

Rubyと同じく個人用

間違っていたら教えて頂きたい。

##開発環境
AWS Cloud9

##Ruby on Railsスタート

基本的にはLaravelと同じでMVCの考え方で大丈夫らしい。

###環境構築

“`terminal
$ gem install rails -v 5.2.4
$ rails new app_name
“`

###コントローラ作成

コントローラ名はなるべく複数形
てかだいたい複数形

場所は
~/home/ec2-user/environment/アプリ名/app/controllers

“`terminal
$ rails g controller コントローラ名
“`

###コントローラアクション付きコマンド

“`terminal
$ rails g controller コントローラ名 アクション名
$ rails g controller todolists home
“`

###コントローラ削除

“`terminal
$ rails d controller コントローラ名
“`
###ルーティング設定

元記事を表示

Ruby 基礎

この記事は完全に個人のRuby開発の際に使用するためだけに作っている。
参考にしていただいてもいいのだが、あくまで個人用という事だけわかって頂きたい。
*執筆者はPHP学習済みなので、飛ばす部分があるが大目に見て欲しい

# 開発環境

AWS cloud9
理由:パソコンにもうファイルが入れられないし、USBなど外部に入れるとあとあとメンドくさい可能性があるから

#Rubyメモ開始

まつもとゆきひろ氏が作った言語。
最近ベンチャー企業とかでめちゃくちゃ使われている。
比較的書きやすい言語

##環境構築

“`terminal
$ gem install rails -v 5.2.4
$ rails -v
Rails 5.2.4
“`

##Ruby基礎文法

###出力

“`ruby
puts ‘hello world’
p “hello world”
#hello world
“`

###型
型についてはPHPとほぼ同じ。

だが妙なものがたくさんある

“`ruby
puts “kaiseiblogの年齢は” + 20 + “才です”
#エラー
puts

元記事を表示

net/httpを利用した外部API連携クラスの作成手順

アプリケーション開発をするにあたり、外部サービスとAPI連携を行う場合があります。

RubyではHTTP通信を行う標準ライブラリとして[net/http](https://docs.ruby-lang.org/ja/1.9.3/library/net=2fhttps.html)が用意されています。
今回はnet/httpを利用して、API経由で外部サービスのデータを取得する方法について紹介します。

## 今回作成するもの
今回は外部サービスの例としてQiitaを利用します。

ゴールは以下の通りです。

– `QiitaClientAPI`というQiita APIと連携するクラスを作成する
– `get_items`というクラスメソッドを利用することでQiitaの記事一覧が取得できるようにする
– API連携でエラーが発生した場合は、エラーレスポンスの内容を例外として出力する
– `localhost:3000/qiita_items`を実行すると`QiitaClientAPI.get_items`の結果が取得できる

なお、今回紹介するサンプルは`rails 6.0.3.4`のA

元記事を表示

【Rails】Travis CIを導入してdb:createで詰まったこと

# はじめに
自動テストツール`Travis CI`を導入するときにつまづいたことを書きます。

# 環境
・Ruby 2.6.5
・Rails 6.0.3.2
・Mysql Ver 14.14 Distrib 5.6.47

# 問題点
以下のような`.travis.yml`に記述している`db:create`がどうしても通らないという問題が発生しました。

“`yaml

script:
– bundle exec rake db:create RAILS_ENV=test
– bundle exec rake db:migrate RAILS_ENV=test
– bundle exec rspec
“`

`Travis CI`の画面ではこのようなエラーメッセージがでました。

![DBcreate.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/667396/43835429-0815-b85e-2299-ea2fc58ab7f5.png)

“`
Mysql2::Error:

元記事を表示

【Ruby/Rails】Rails6でのjQuery導入方法

# はじめに
## やりたいこと
– いいね機能のAjax対応を実装したい
– そのためにjQueryを導入したい

## 動作環境
ruby 2.6.5 / Rails 6.0.3.4

## やってみて
Rails6から標準装備されているWebpackerを利用することで簡単に実装できました。
多くの記事がRails5までの情報でとっっっても遠回りしたので、6以降の方は僕のように無駄な時間を使わないでいただけたら…

##参考URL
[Railsガイド > Rails で JavaScript を使用する](https://railsguides.jp/working_with_javascript_in_rails.html)

#手順
– jQueryのインストール
– Webpackの設定
– application.jsの設定
– 動作確認

## jQueryのインストール
そもそもjQueryとは
>JavaScriptをより簡単に記述するためのライブラリのひとつ。

したがって、jQuery(ライブラリ)を使うのであればJavaScript(元のプログラミング言語)に

元記事を表示

【ActiveAdmin】デフォルトのcreateとupdateの処理をカスタマイズしたい

記事はこちら↓
[【ActiveAdmin】デフォルトのcreateとupdateの処理をカスタマイズしたい](https://www.malanka.tech/entry/Customizing-the-default-create-and-update-process-_in-ActiveAdmin)

元記事を表示

【ActiveAdmin】select_boxで表示するcollectionのscopeを指定したい

記事はこちら↓
[【ActiveAdmin】select_boxで表示するcollectionのscopeを指定したい](https://www.malanka.tech/entry/Specify-the-scope-of-the-collection-to-be-displayed_-in-select_box-in-ActiveAdmin)

元記事を表示

Rails, RSpecの導入手順

# 環境
rails 6.0.3.4
ruby 2.6.5

# 流れ
・モデルの単体テストの目的、何をテストするのか
・RSpec導入準備(必要なgemのインストール)
このような流れで説明していきます。

# 1 テストの目的
結論、コードの保守性を保つためです。当たり前ですがリリースしたアプリケーションにバグが生じるのは望ましくありません。バグが生じないことを手作業で確かめるの思わぬ見落としがあるかもしれない、ということで信頼できるテストを書いておけばコードに変更があった際でも「テストが通ったからok」と手作業で挙動を確かめる手間を省けるということです。

# 2 何をテストするか
① バリデーション
データベースに値を保存する際には「空の値を保存しない」、「文字数は何文字以内」、「数字のみ保存する」、「大文字は小文字に変換する」などのルールを定義します。規則性のない値が保存されてしまうことがデータベース設計上望ましくないからです。rails側でこのルールを定義する方法がモデルのバリデーションです。そのため、モデルのテストではバリデーションが正しく動作しているかをチェックします。

元記事を表示

備忘録:Railsによるコメント機能実装

#はじめに
Rubu on Railsでオリジナルアプリを作成しています。そのアプリにコメント機能を実装しました。そのため忘れないように書き記します。

#手順
・commentモデル、テーブルの作成
・commentsコントローラーとルーティングの設定
・各コントローラーのアクション設定

#commentモデル、テーブルの作成
はじめに下記のようにターミナルでcommentモデルを作成します。

“`bash
rails g model comment
“`

その後マイグレーションファイルに、textカラムを追加します(このtextカラムにはコメントが保存されます)。

“`ruby:2020*********_create_comments.rb
class CreateComments < ActiveRecord::Migration[6.0] def change create_table :comments do |t| t.text :text, null: false t.references :user, foreign_

元記事を表示

stripeを使いショッピングサイトを作ろう!(購入編)

###プチ宣伝
https://www.code-sell.net/
コードを販売できるサービスを作りました!いらないコードがある方はぜひ使ってく見てください。ちなみにこの記事で説明するstripeを使用しています。

##初めに
こんにちは!今回はrailsとstripeを使い簡単?にECサイトを作っていきます。少し前自分もrailsとstripeで [コードを販売するサイト](https://www.code-sell.net/)を作ったのですがstripeの情報が少なすぎて非常に苦労しました。正確には情報自体はたくさんあるのですが実践的な情報が少なくただただ公式ドキュメントのようにコードを並べちょこっと説明するみたいなものばっかりでした。今回は実際にサイトを作っていきます。

##使う技術・作るもの
noteみたいな記事を購入できるもの

rails
ruby
stripe

##stripeってそもそもなに?
決済システムです。payjpとくらべ手数料が安かったり送金機能があったりします。

###全体像
![https___stripe.com_img_docs_connec

元記事を表示

Railsで RoutingError がFATALレベルでログに出てくることへ対処(したかった)

## 概要
`RoutingError` が**FATALレベル**でログ出力される点が困っている。FATALは運用時に「即時対処が必要なもの」と決めていて夜間でもアラートが鳴るようにしているのだが、 `RoutingError` はクライアントが不正なリクエストをすれば簡単に起こせるので、そもそもログに出されなくていい。(404はwebサーバーのアクセスログでもわかる)

何か設定を間違えているだけかと思っていたが、[Railsガイド通りに新規作成したばかりのrailsアプリ](https://railsguides.jp/getting_started.html)でも同じことが起きたため、railsが何をしているのかソースコードを色々と調べることになった。結局適切なオプションは見つけられず、railsの MiddlewareStack に手を加えるという形になってしまった。(この辺の仕組みに目を通せたのは収穫。)

環境: Rails 6.0.0 / Ruby 2.5.3 / Ubuntu 20.04

## ログのサンプル
リクエストを受けた際のrailsのログを以下に示す。

元記事を表示

【Rails】DM(チャット)機能 + Ajax 実装!

#まえがき
以前スクールの課題でDM機能を実装した際に、色々なサイトを参考にして作成したのですが、かなり複雑で無駄な記述が多くなってしまいました。無駄な部分を省きながらoutputしていきたいと思い投稿しました。おかしな点はご指摘お願いします、、!

#実装環境
ruby ‘2.6.3’
gem ‘rails’, ‘~> 5.2.4’, ‘>= 5.2.4.3’
gem ‘jquery-rails’
gem ‘devise’(DM機能実装過程でヘルパーメソッドのcurrent_userを使用しています)
gem ‘bootstrap-sass’, ‘~> 3.3.6′(無くても可)

**userモデル**は事前に作成して、他ユーザーのshowページを閲覧できるようにしてある前提で進めていきます。

#実装していく内容
usersのshowページにリンクを作成し、DMページ(chatsのshow)へ遷移して実際にトークが行えるように実装していきます。
model名やページ内に表示したい文字列等は適当に置き換えてください。

#実装後のイメージ
![image.png](https://

元記事を表示

OTHERカテゴリの最新記事