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

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

文字列を作るときに%でも作る方法を見つけたので備忘録

#目的
文字列を作るときに%でも作る方法を見つけたので備忘録
#感想
使うんかなぁ

#%q! ! シングルクオートで囲んだことになる
“`ruby:%q!!
puts %q!Hello world! #=> Hello world
“`

#%Q! ! ダブルクオートで囲んだことになる
“`ruby:%Q!!
it = “this”
puts %q!#{it}Hello world! #=> this Hello world
“`

#%! ! ダブルクオートで囲んだことになる
“`ruby:%!!
it = “this”
puts %q!#{it}Hello world! #=> this Hello world
“`

#参考
プロを目指す人のためのRuby入門書

元記事を表示

present?メソッドとnil?メソッドの使い方

#はじめに
 今回はpresent?メソッドとnil?メソッドについてまとめます。どちらも条件分岐の時に便利なメソッドです。条件分岐どうしようと悩んだ時に、このメソッドで解決できたのでまとめます。
この記事は学習備忘録です。

#present?メソッドとnil?メソッドの違い
 present?メソッドとnil?メソッドはどちらも、**変数の中身があるか否か**ということを判定するメソッドです。違いとしては変数に中身があるかないかで返す値が変わるということです。

present?メソッド→変数に中身がある時にtrueを返す

“`
@tests.present?
#実行結果
=> true
“`

nil?メソッド→変数に中身がない時にtrueを返す

“`
@tests.nil?
#実行結果
=> true
“`

このメソッドを利用して条件分岐を作る事ができます

#present?メソッドとnil?メソッドで条件分岐を作る
 present?メソッドとnil?メソッドの使用例として、変数に中身がある場合は商品を表示させて、中身がない場合は代わりの画像を表示させる実装

元記事を表示

【Rails】RSpecの導入手順(メモ)

## 1. 必要モジュールのインストール
* RSpecをRailsアプリで使用するためには`rspec-rails`というgemが必要です。
* また必須ではありませんが、RSpecのテストをより高速に実行するために`spring-commands-rspec`もインストールしておきます。
* インストールグループとしてtestだけでなくdevelopmentも追加することでテストファイルを作成するgeneratorを使用することができます。

“`ruby:Gemfile
group :development, :test do
gem ‘rspec-rails’
gem ‘spring-commands-rspec’
end
“`
* bundle installでGemfileに記載したgemをインストールします

“`
$ bundle install
“`

## 2. spring-commands-rspecの設定
以下を実行して`bin/rails`が使用できるように設定します

“`bash
$ bundle exec spring binstub

元記事を表示

Railsチュートリアル(6版)の13章で_form.html.erbを使っていた場合の戸惑い解消

# はじめに
プログラミング初学者の[@kat_log](https://twitter.com/kat__log “Twitter”)と申します。

Railsチュートリアル(Rails6版)の13章「13.3.2マイクロポストを作成する」の「リスト 13.43、13.44」で戸惑った部分について共有です。

## 戸惑ったポイント
10章の「10.1.1編集フォーム」の演習2をやった場合、`new.html.erb`と`edit.html.erb`の一部を`_form.html.erb`としてパーシャルにするため、テキストと違いが出て、どの部分を`f.object`にするか戸惑いました。

# 結論
`new.html.erb`と`edit.html.erb`は書き換え不要で、`_form.html.erb`を1箇所変えるとOKです。

“`ruby:_form.html.erb
<%= form_with(model: @user, local: true) do |f| %>
<%= render 'shared/error_messages', object: f.ob

元記事を表示

Ruby 中級者になるために絶対に理解しておかなければならない知識

こんにちは!石田佳介です!

今回の記事では、RoR初心者が中級者になるために絶対に抑えておかなければならないことを記事にします。

それは、オブジェクト、インスタンス、インスタンス変数、クラス

この4つを人に説明できるようになるくらい理解していないと絶対に更なる高みにはいけません。

それはなぜか?理由は、めちゃくちゃ大事な基礎であり、RoRの根幹になるものだからです。いくら多くのメソッドをおぼえても、上の4つを完璧に理解していなければ、実務に入ってもいつか頭打ちがきます。

こんな言っている僕ですが、ぼくも最近理解したので、心配しないでくださいね(笑)

今回使用する言語はrubyを使うので、ご了承ください

それでは本題に入りましょう

そもそもオブジェクトって?

この言葉よく聞くとおもいますが、そんな難しいことを言っているわけではありません。よく「モノ」と表現されます。現実世界でイメージしてみるとよく分かると思いますが、世の中には、モノであるあふれてますよね。スマホ、パソコン、本、等々あげたらキリがありません。

それはわかったけど、プログラミングの話をしてくれよ!っていう

元記事を表示

【Ruby】任意の数字が配列の中の何番目に格納されているかを確認 searchメソッド

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

開発環境
rails 6.1.4.1
ruby 2.6.5

##概要##
任意の数字が配列の中の何番目に格納されているかを確認できるプログラムを実装。

##問題内容##
以下の配列から任意の数字を探して何番目に含まれているかという結果を返すsearchメソッドを、each_with_indexを用いて作成しましょう。

“`csharp
input = [3, 5, 9 ,12, 15, 21, 29, 35, 42, 51, 62, 78, 81, 87, 92, 93]
“`

**雛形**
以下の雛形のコードを参考に解答しましょう。

“`ruby
def search(target_num, input)
# 処理を記述
end

input = [3, 5, 9 ,12, 15, 21, 29, 35, 42, 51, 62, 78, 81, 87, 92, 93]
# 呼び出し例
search(11, input)
“`
**出力例**
search(5, input) → 2番目にあります
search(12, in

元記事を表示

Railsでコメント機能のajax化

##コメント機能のajax化
[前回のajax化の記事](https://qiita.com/mmaumtjgj/items/ef494de60a36f2e769b1)にてどんなものかある程度理解したので、この記事ではお気に入りボタンの実装を例としてしたが、今回はコメント機能の投稿と削除のajax化の備忘録として記載。

**手順**
①コントローラーの修正
②“remote: true“の追加や“class“、“id“の指定
③“js.erbファイル“の追加

##①コントローラーの修正
“redirect先“を削除

“`修正前comments_controller.rb
class CommentsController < ApplicationController def create comment = current_user.comments.build(comment_params) if comment.save redirect_to board_path(comment.board), success: t('

元記事を表示

docker compose環境のrailsでDB関連のエラーが出たら確認することまとめ

# 環境
docker compose
mysql
rails6
rails初心者が色々迷走しているうちに様々なエラーに出会ったのでまとめてみます。

# エラー
データベースがない時に出るエラーです。

“`error.rb
ActiveRecord::NoDatabaseError: Unknown database
“`
## 対応
データベースがあるかを確認します。

“`checkdb.sh
#execコマンドでrailsコンテナの中に入ります。
$ docker exec -it xxxxxxxxxx bash
#railsコンテナの中からmysqlコンテナに接続しつつmysqlを立ち上げます。
root@xxxxxxxxxx:/app# mysql -u root -p -h db
#ここでmysqlが立ち上がらない場合そもそもdockerコンテナ同士の通信がうまく行っていないので下の「dockerコンテナ間の通信を確認する」を見てください。
#mysqlが立ち上がった場合はshow databasesでデータベースがあるか確認します。データベース名はrailsアプ

元記事を表示

[Ruby]配列のアレコレ

基礎的だから難しくはないけど、使ってないと何気忘れそうなので記事に。

## 配列に値を追加する場合
`<<`の演算子を使用する ```zsh:例 irb(main):001:0> pencil_case = [“ペン”, “消しゴム”, “定規”]
=> [“ペン”, “消しゴム”, “定規”]
irb(main):002:0> pencil_case << "えんぴつ" => [“ペン”, “消しゴム”, “定規”, “えんぴつ”] #配列に”えんぴつ”が追加される
“`

## 配列の値を指定して取得する場合
`添字`を使用する

“`zsh
#配列の要素を取得
配列[添字]

#配列の要素を取得し変数に代入
変数 = 配列[添字]
“`

## 配列の値を変更する場合
変更したい要素を取り出して、新しい要素を代入する

“`zsh
#配列の要素を変更
配列[添字] = 値
“`

 
以上。

元記事を表示

Rubyのinitializeの可視性の変更

`initialize`は特別なメソッドとして扱われるので、
`public`や`protecd`の配下であってもprivateメソッドのままになる。

“`ruby
class Public
protected
def initialize
end
end

p Public.new.private_methods.include?(:initialize) #=> true
p Public.new.public_methods.include?(:initialize) #=> false
p Public.new.methods.include?(:initialize) #=> false
“`

“`ruby
class Protected
protected
def initialize
end
end

p Protected.new.private_methods.include?(:initialize)
p Protected.new.protected_methods.include?(:initialize)

元記事を表示

Rubyのprependによる定数探索バグ(3.1で修正済)

Ruby技術者認定試験の対象バージョンは、いまだに2.1である。

2.1にバグがあり、
Ruby技術者認定試験の有名なRExという練習問題で、
バグが混在されたまま出題されて、
勉強中の受験生を悩ませている定数探索の問題がある。
実際、ruby-jpというSlackで、同じ質問が3回されているのを見た。

そのバグは3.1で修正されたのだが、そのバグについて解説する。

“`ruby
module PrependedModule
CONST = “PrependedModule”
end

class Parent
CONST = “Parent”
prepend PrependedModule
end

class Child < Parent p Module.nesting #=> [Child]
# レキシカルスコープは、Childのみ。

def self.const
CONST
end
end

p Child.ancestors #=> [Child, PrependedModule, Parent, Object, Kernel

元記事を表示

【Rails】メソッド名を付けるときに気をつけること

最近、1つのメソッドで色々なことをしてしまってるメソッドのリファクタリングをしていて、
その過程で処理ごとにメソッドに切り出すことが多く、
メソッド名の付け方で迷うことがあったのでまとめてみる。

###オブジェクトを別の形に変換するメソッド名はto_hogeにする

“`ruby
# hashにして返すメソッド
# 悪くはない例
def convert_to_hash
end

# より良い例
def to_hash
end
“`

###否定形のメソッド名はなるべく作らない
判定が複雑になると可読性が下がってしまうこともある。
否定形のメソッドを作りたくなったときは、逆の意味(肯定)のメソッドを作って“`!hoge“`の形にして使う。

“`ruby
# 良くない例
book.not_published?

# 良い例
!book.published?
“`

###判定形のメソッドの末尾には疑問符?をつける
trueかfalseを返すメソッドの末尾にだけ「?」をつける。それ以外にはつけない。

“`ruby
shop.open?
“`

メソッド名に疑問符をつけら

元記事を表示

【2022年最新】Rails6にBootstrap5を導入する方法

※ 本記事はRails6でBootstrap5を導入したい方向けの記事です!
※ Rails5やBootstrap4など、バージョン違いのものを導入する場合とは手順が異なります!

## 開発環境&前提条件
Ruby 3.0.2
Rails 6.1.4.4
導入したBootstrap 5.1.3
Rails6でrails newしてある状態

## Bootstrap5のインストール
“`terminal:terminal
% yarn add bootstrap
“`
上記コマンドでBootstrapの最新バージョンがインストールされます!
バージョンを指定する場合?

“`terminal:terminal
% yarn add bootstrap@バージョン番号
“`

ドロップダウンなどのポップアップ要素をいい感じにしてくれるpopper.jsもインストールします!

“`terminal:terminal
% yarn add @popperjs/core
“`

## application.html.erbに追記
“`erb:app/v

元記事を表示

assertEqualsやassert_equalの引数はなぜ expected, actual の順なのか、調べてみた

## はじめに

xUnit系のテスティングフレームワークでは、2つの値が等しいことを検証するメソッド(`assertEquals`や`assert_equal`など)の引数が expected, actual(期待する値、実際の値)の順に並びます。

“`java
// Java (JUnit)
assertEquals(2, calculator.add(1, 1));
“`

“`ruby
# Ruby (minitest または test-unit)
assert_equal(2, calculator.add(1, 1))
“`

しかし、この引数の順番は直感に反するので、逆に書きたい、と思う人も中にはおられるようです(というか、僕も昔そう思っていました)。

“`java
// actual、expectedの順がいい!
assertEquals(calculator.add(1, 1), 2);
“`

“`ruby
# actual、expectedの順がいい!
assert_equal(calculator.add(1, 1), 2)
“`

元記事を表示

GraphQL RubyのDataloaderを使ってみる

GraphQL Rubyを使っているときにSQLのN+1問題を解決するためにバッチロードを利用すると思います。
有名なgemとしては [GraphQL::Batch](https://github.com/Shopify/graphql-batch) や [BatchLoader](https://github.com/exAspArk/batch-loader)、 [Dataloader](https://github.com/sheerun/dataloader)などがあります。
個人的には使ったことがあるのは[Dataloader](https://github.com/sheerun/dataloader)なのですが、2018年から更新されていないようなのと、去年GraphQL Ruby自体にDataloaderが入ったので今回はこちらを触ってみました。

## GraphQL::Dataloader の概要

ドキュメントはこちらです。

https://graphql-ruby.org/dataloader/overview.html

GraphQL::Dataload

元記事を表示

【Rails】ツイートを作成順ではなく、いいねした順に表示したい

# 概要
ツイート投稿機能とツイートへのいいね機能を持つアプリケーションを開発中、
いいねした順番にツイートを取得する方法について調べたのでメモ。

## 環境
ruby 3.0.2
rails 6.1.4
mysql 8.0.26

## やりたいこと
**ツイートの作成順**がデフォルトの時に、
**ツイートの作成順**ではなく**ユーザーがいいねした順**にツイートを取得したい。

## 先に結論
reorderを使用し、中間テーブルのカラムを直接指定する

“`ruby:users_controller.rb
# ユーザー詳細画面で表示したい場合
def show
@user = User.find(params[:id])
@favorites = @user.favorite_tweets.reorder(‘favorites.created_at DESC’)
end
“`

以下、詳細

### 関連するモデル

“`ruby:user.rb
class User < ApplicationRecord has_many :tweet

元記事を表示

確認ダイアログをBootstrapで見栄え良くする

## 前提
・CRUD処理の実装はOK
・Bootstorapが導入済みである

## 開発環境
Ruby2.6.3
Rails5.2.5
Bootstrap4

## 目標
“`ruby:
# 前後の記述は省略
<%= link_to "削除", post_path(post), method: :delete, data: { confirm: "削除しますか?" } %>
“`
上記のように記述した時に出る削除確認ダイアログ

![スクリーンショット 2021-11-29 17.39.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2309590/fd94f2ad-d76f-983c-529b-ac59e2454876.png)

これだとちょっと味気ないので

![スクリーンショット 2021-11-29 17.50.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2309590/56e022be-6

元記事を表示

gem installに失敗してた原因と解決方法

# 環境
– MacBook Pro (16-inch, 2019)
– macOS Big Sur 11.6.2
– Xcode13.2
– ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.x86_64-darwin20]
– rbenv 1.2.0のインストール済み(参考:[rbenvでrubyのバージョンを管理する – Qiita](https://qiita.com/hujuu/items/3d600f2b2384c145ad12))

# 発生していたこと①
`gem install jazzy` をすると、パーミッションエラー
> ERROR: While executing gem … (Gem::FilePermissionError)
You don’t have write permissions for the /Library/Ruby/Gems/2.6.0 directory.

## 原因
gemのインストールはsudo付けない方が良い(が過去につけたせいで持ち主が管理

元記事を表示

[Rails]未経験独学が読書を習慣化できるアプリを制作しました

# 1. はじめに
**本記事を閲覧いただきありがとうございます!**
**私は現在、バックエンドエンジニアへの転職を目指して学習をしています。学んだことを活かし、Rails にてWebアプリを制作しましたので、概要や工夫した点などを記事にまとめてみました。**

# 2. アプリ概要
## ? BookDaily
**「 読書 × 習慣化 」**
読書を習慣化できるサービスです。
読む本を登録すると、毎日何ページまで読むかの目標が設定され、読書の進捗を管理することができます。

– **毎日何ページまで読めばいいのか、目標がひと目で確認できます!**
– 読む本を登録 -> 読み終わる日を設定 -> 毎日の目標が設定
– **日々の読んだページ数の記録も簡単にできます。**
![movie.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/882861/b5dd5a7c-4597-ee08-2fce-fe759d634bef.gif)

– **進捗や達成率をわかりやすく表示し、モチベーションを

元記事を表示

【Rails】scopeメソッドとクラスメソッドでnilを返す時の挙動が違う

##クラスメソッドの場合

“`ruby
class Book
def self.published
where(published: true)
end
end

Book.published.order(id: :desc)
#=> Attendance Load (3.8ms) SELECT `attendances`.* FROM `attendances` WHERE `attendances`.`date` BETWEEN ‘2022-01-01’ AND ‘2022-01-31′ ORDER BY `attendances`.`id` DESC
“`

nilの場合はnilが返るのでメソッドチェーンが使えない。

“`ruby
class Book
def self.published
nil
end
end

Book.published
#=> nil

Book.published.order(id: :desc)
#=> NoMethodError: undefined method `order’ for nil:Ni

元記事を表示

OTHERカテゴリの最新記事