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

Ruby関連のことを調べてみた2021年08月03日
目次

Ruby問題のアウトプット

#問題20

Aさんは普段土日が休みの仕事に就いており、休みの日は遅くまで寝ていたいと考えているとします。
そこで、Aさんのためにその日が遅くまで寝ていられるかどうかを判断するプログラムを作成しましょう。
休みの場合はTrueを、休みでない場合はFalseを出力し、Trueの場合は長く寝ていられると判断します。

休みかどうかを判別するメソッドsleep_inを定義し、引数として2つ渡します。1つ目が月~金曜日(weekday)であるかどうか、2つ目祝日やお盆休みなどの休暇日(vacation)であるかどうかです。

具体的には、土曜日または日曜日の場合(weekdayがfalseの場合)や、休暇日(vacationがtrue)の場合は、休みとなるのでTrueを返します。

呼び出し方:

“`
sleep_in(weekday, vacation)
“`

出力例:

“`
sleep_in(false, false) → True
sleep_in(true, false) → False
sleep_in(false, true) → True
“`

#答え
“`

元記事を表示

[Rails]ransackを使った検索機能

今回は、`ransack`というgemを使った検索機能の解説をしていきたいと思います。

`ransack`を使うことで、検索機能をかんたんに実装することができます。
gemの素晴らしさを体感できる系ですねw

#開発環境

> ruby 2.6.3
> Rails 5.2.6

#前提

検索機能は、ユーザーの検索を例に出していくので、すでになんらかのアプリで、ユーザーが存在するものをご準備ください。

#手順

– gem ransackのインストール
– コントローラー
– ルーティング
– ビュー

#gem ransackのインストール

まずは、gem ransackをインストールします。

“`Gemfile
gem ‘ransack’
“`

を追加できたら

“`
$ bundle install
“`

#コントローラー

ではさっそく、検索の処理をコントローラーに記述していきます。

ここでは、usersコントローラーにsearchアクションには、検索の処理を、indexアクションでは検索結果を取得しています。

“`controllers/users_

元記事を表示

[Ruby on rails] ”undefined method `each’ for nil:NilClass”エラーが出た時の対処法

エラー画面

グループを作成後、一覧画面でグループ一覧を作成しようとしてたところ、
こんなエラーが出てきました。

こういうエラーは大体スペルミスに原因があるのではないかと思います!

![スクリーンショット 2021-08-03 9.49.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/bacd570a-6c0c-5a9b-3fa0-3677aaa2fc45.png)

解決方法

コントローラー、モデルの記載を見直せど、スペルミスは見当たらず…
createコントローラーをよく見たのですが、わからず…
form_withでの送信がなんか、おかしいのかな~?と思ってみたら…

ここでした!

“`
<%= form_with model: group, local: true do |f| %>

<%=f.label"勉強会名"%

元記事を表示

【Rails】form_withを使って情報入力欄を実装する方法

#対象者

* form_withを使って入力項目の作成を考えている方

#目的

* form_withの基礎構文を学んで、実装手順を抑えること

#実際の手順と実例
###1.前提
Rails tutolialのsample appを参考にしています。

* ユーザー登録の新規登録フォームを作成しようとしています。
* UsersController、Userモデル、new.html.erbに実装していきます

###2.コントローラーの設定

下記のようにコントローラーに記載します。

“`users_controller.rb
class UsersController < ApplicationController def new @user = User.new end end ``` 以前メンターさんにご質問させていただいた際に、 「form_withが筆記用具だとしたらnewメソッドが紙みたいなもの」 的なニュアンスのこと仰っていて、すごくしっくり来た気がします。 つまり、コントローラーにnewメソッドを定義したインスタンス変数変数は必須

元記事を表示

sinatraを使ってDiscordのメッセージをLINEのグループに共有し連結する

# 概要
Discord使っていて通知の面だったり、LINEのほうが日常的に使っていて浸透しやすいという事があったので、LINEとDiscord両方に同じメッセージを送るのがめんどくさいので、DiscordのメッセージをLINEにも送るbotを作ることにしました。

下記のサイトを参考にさせてもらいました。
https://qiita.com/kkbase515/items/d7ada101e3095c2bd051
https://qiita.com/fullmated/items/81d1a49ed3d49eda2285

# はじめに
この記事では
– Heroku使ったことない
– RubyはProgateで一周ぐらい
– Sinatraは全く知らない
という人に向けて説明していきます。
かくいう私自身がその状態だったので、復習、議事録という意味でもこの記事を書きました。

## 環境
– MacOS11.4
– Rubyインストール済み
ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-darwin20]
http

元記事を表示

【初心者向け】rails 投稿機能解説!form_withやストロングパラメータを図で理解!

# はじめに
form_withをつかった投稿機能は、Rails 初学者がつまづきやすいポイントかと思います!
本記事では **form_withを使った入力フォームの作成** 、**ストロングパラメータ**、**データの保存**までを解説していきます。

図を織り交ぜていますので、イメージをつかみつつ理解を深めていきましょう:sunny:

### 動作環境
– Ruby 2.6.7
– Rails 5.2.7 (動作としてはrails6系でも同様です)

### 実装する機能・仕様
フォームでタイトルと内容を入力し、データベースに保存する。
Blogモデルにtitle、bodyカラムを準備。

# form_withを用いて入力データを送信する
new.html.erbにてフォームを以下のように作成していきます。

“`ruby:blogs_controller.rb
def new
@blog = Blog.new
end
“`

“`erb:new.html.erb

Blogs#new

<%= form_with model: @blog, loc

元記事を表示

技術書「Rubyソースコード完全解説」 と 「docker で ruby」構築

今まで買ってよかった技術書を紹介しよう!
https://qiita.com/official-events/d409f91fc8b9b44cefb4
の企画に参加する記事です。

Docker上のみでシステムを作るときの構成
https://qiita.com/official-events/339b6440dbd578f4f66f
参加記事です。

#協賛企画

bookmeterで協賛企画をはじめました。
今まで買ってよかった技術書を紹介しよう!
https://bookmeter.com/events/8648

技術書は、紹介してもなかなか反応がなく、嫌気が指すかもしれません。
amazonに1万冊感想を書くという目標を立てたとき、技術書ばかりを書いていて、
反応がほとんどなく、底なし沼に石を投げているような感覚に襲われたことがあります。

そこで5つの手を打ちました。

1つは、芥川賞、直木賞を読むことにより、文学の投稿をするようにしました。
芥川賞、直木賞を読む コミュニティ
https://bookmeter.com/communities/332458
芥川賞、

元記事を表示

binding.pryを使えるようになりたい!2

# はじめに
本記事は、昨日投稿した続きで、
「binding.pry」の使い方をまとめたものになります。
前回の投稿もご参照ください。

https://qiita.com/mkato1013/items/e7cbc21a4a03c9acf22c

# 「binding.pry」の目的
たとえ、「binding.pry」が万能だとしても、
確認できることは限られています。

“`
目的(私が思いつくものです。他にもあると思います。)

①paramsの中身の確認
②「binding.pry」の後に、if文があれば、true or falseの指示が出せているかどうか
③エラー内容の確認
④インスタンス変数の中身の確認
“`
結論としては、
`何かの中身や結果が期待するものかどうかを調べたい時`
`エラーの原因はどこにあるのかを探したい時`
が目的となります。

# 何ができる?

“`
ここのコードが間違えているため、このように修正しなさい!!
“`
という`直接的にエラーを解決できるものではありません`。

“`
ここではないかという目星をつけ、
「ここは間違えていない!

元記事を表示

Railsの環境構築

##はじめに
環境構築はPCを購入した後、一回やれば何度も毎回やる必要のない作業です。
ですので全く作業工程を覚えられる気がしないので、私が初めて行ったRailsで開発するための環境構築を忘れないうちに、ざっと書いておきます。

ちなみにMacでiOSはCatalina以降のやり方になります。

よろしくお願いします。

##Command Line Toolsをインストール
まず、Command Line Toolsを入れる前に下記のコマンドをターミナルで実行します。

“`terminal:ターミナル
# zshをデフォルトに設定
% chsh -s /bin/zsh

# ログインシェルを表示
% echo $SHELL
# 以下のように表示されれば成功
/bin/zsh
“`

もしパスワードを求められたら、PCのパスワードを入力します。

さあ、Command Line Toolsをインストールします。Command Line ToolsとはWebアプリケーション開発に必要なソフトウェアをダウンロードするために必要となる機能です。

下記のコマンドをターミナルに打ち込みま

元記事を表示

[Ruby on rails]タグ付け機能② タグをリンクにしてタグで検索(複数タグ)

やりたいこと

①投稿に対して複数タグを付けれるようにする(別記事で実装済)

②タグをリンクにして、検索できるようにする。リンクになってるタグを押すと、
そのタグを付与してる記事一覧が表示される

:fist:複数タグの投稿
![スクリーンショット 2021-08-02 14.02.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/d4dbb3f1-e343-c84e-9bf0-62e85deb1d82.png)
:fist:投稿一覧画面でタグの一覧と、記事数の表示
![スクリーンショット 2021-08-02 14.02.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/8445fd36-0244-02c4-bc88-0fc446c80fa4.png)
:fist:タグを押すと、検索ができ、そのタグがついてる投稿を検索できる
![スクリーンショット

元記事を表示

[Ruby on rails]タグ付け機能① 複数のタグ付け

やりたいこと

①投稿に対して複数タグを付けれるようにする
②タグをリンクにして、検索できるようにする。リンクになってるタグを押すと、
そのタグを付与してる記事一覧が表示される

:fist:複数タグの投稿
![スクリーンショット 2021-08-02 14.02.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/d4dbb3f1-e343-c84e-9bf0-62e85deb1d82.png)
:fist:投稿一覧画面でタグの一覧と、記事数の表示
![スクリーンショット 2021-08-02 14.02.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/8445fd36-0244-02c4-bc88-0fc446c80fa4.png)
:fist:タグを押すと、検索ができ、そのタグがついてる投稿を検索できる
![スクリーンショット 2021-08-02 14.02.2

元記事を表示

【Rails】コントローラーのリファクタリング

# はじめに
ポートフォリオで、コントローラーのリファクタリングをやったので、備忘録として記事を書きます。

#環境
・Ruby 2.6.3
・Ruby on Rails 5.2.5

# リファクタリング1つ目 concemsを使う
共通記述を複数のコントローラーで使う時にやる
app/controllers/concernsにファイルを追加し、必要箇所で読み込ませる

“`ruby:controllers/concerns/search.rb
module Search
extend ActiveSupport::Concern

def search
@keyword = params[:word]
redirect_to request.referer, notice: “検索文字を入れて下さい” if @keyword.blank?
searcher = Searcher.new(params[:word].split(/[[:blank:]]+/))

@users = Kaminari.paginate_array(searc

元記事を表示

[Rails]N+1問題を対処する

N+1問題って聞いたことはありますか?

N+1問題はかなり怖い問題で、ぼくはポートフォリオ作成のときに、N+1問題に直面しました。

そのときに、調べた内容をぼくの理解の範囲で、アウトプットしていきます。

#N+1問題とは

そもそもN+1問題とはどんな問題のことをいうのでしょうか?

`データベースからデータベースを取り出すときに、大量のSQLが発行されて、動作が重くなる問題`のことです。

たとえば、usersテーブルとpostsテーブルで、下記のようなアソシエーションがあったとします。

“`models/user.rb
class User < ActiveRecord::Base has_many :posts end ``` ```models/post.rb class Post < ActiveRecord::Base belongs_to :user end ``` で、投稿の一覧を表示していきます。 Postモデルから全データ取得して、それをeach文で回していきます。 ```controllers/posts_controller.rb cla

元記事を表示

【Rails】サンプルユーザーを増やす!Fakerの導入でサクラを作る方法

#対象者

* 作成したサイトにテストユーザーを大量に導入したい方

#目的

* Gem「Faker」を使用してデータを増やすこと

#実際の手順と実例
###1.Fakerとは

Fakerとは実際にいそうなユーザー名(ユーザー以外も行ける??)を作成するGemです。

これの導入によって手作業で1人ずつユーザー登録をしていくという作業や手間をカットできます。

###2.Faker導入方法

#####1.gemに導入

“`Gemfile
:
:
gem ‘rails’, ‘6.0.3’
gem ‘bcrypt’, ‘3.1.13’
gem ‘faker’, ‘2.1.2’
gem ‘will_paginate’, ‘3.1.8’
:
““`

この後**bundle install**を実行します

#####2.サンプルユーザー作成

seedファイルに作成していきます。

まずメインとなるユーザーを1人作成します

““`db/se

元記事を表示

Rails deviseの導入方法と仕様・仕組み

# deviseとは

ユーザー管理機能の実装を補助してくれるRubyのgem(ライブラリ)です。
新規登録・ログイン・ログアウトやメール認証・SNS認証等の機能を実装でき、セキュリティ的にも安全なものが作れます。

# devise導入

Railsのアプリケーションディレクトリ直下にある`Gemfile`の末尾に以下を追記します。

“`Gemfile
gem ‘devise’
“`

ターミナルでRailsのアプリケーションディレクトリに移動し、以下コマンドを実行してインストールします。

“`zsh
bundle install # gemインストール
rails g devise:install # deviseの設定ファイル生成
“`

# 認証用のモデルを作成

認証用のモデルを作成します。以下ではuserモデルを作成していますが`customer`や`mail_user`、`admin`等好きなモデル名でOKです。

“`zsh
rails g devise user
“`

migrationファイルやmodelファイルが生成されます。
`rails g

元記事を表示

[Rails]パンくずリストの実装方法

# はじめに
パンくずリストを一ページごとに挿入するのは面倒で管理がしにくいです。webサービスに関しても遷移が多くなるので、パンくずリストを実装していないと希望のページに飛びにくくなってUI的に下がります。そこで、パンくずリストを簡単に導入できるGemを紹介します。是非つかっていただけたら記事を書いた甲斐があって嬉しいです。

# 紹介するGem

## gretel
パンくずリストのためにつくられたGemで、スター数は少ないものの簡易的にパンくずリストを実装できます。
多少使いにくい部分も出てきましたので改善の余地があります。最新アップデートが一か月前なので、まだ期待はできるかなと。(自分でプルリク出すのはニッチすぎる部分なので控えます?)

https://github.com/kzkn/gretel

# 使い方

## 1.Gemをインストール

“`ruby:Gemfile
gem “gretel”
“`
“`
bundle install
“`
## 2.Configファイルを作成
“`
rails generate gretel:install
“`
上記の

元記事を表示

部分テンプレートで初歩的なエラー

# ActionView::MissingTemplate エラーが起きました!
ポートフォリオが完成してきたので、可読性の向上、見た目を整えようと思ってheaderを部分テンプレートにしようと思い、取り組もうとコードを書き始めましたが・・・・。
![エラー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1719458/37caaac1-5c2e-9175-5b5f-4c393971e917.jpeg)

# 結論
フォルダの階層を間違えておりました!
お手本にしているのでは、sharedファイルは、viewファイルの階層にあったのですが、deviseを使っていた為、deviseファイルの階層(1階層下)に潜り込んでいたが故に怒ったエラーだったんですね。

# 反省点
エラーが出てググってみるも、同じエラーでも原因の種類もたくさんありました。
とりあえず今回は数分で気づくことができたので、自分の中ではよしとしましょう・・・。

元記事を表示

【第9章】Railsチュートリアルでbcryptとfixtureについて忘れていたので復習した

[Railsチュートリアル第9章(第6版)](https://railstutorial.jp/chapters/advanced_login?version=6.0#cha-advanced_login)でbcryptとfixtureを忘れていたので、復習した。

#①bcrypt(ビー・クリプト)とは
・“`6.3.1 ハッシュ化されたパスワード“` にて登場
・パスワードをハッシュ化する為の、最先端のハッシュ関数。
・ハッシュ化すると元のデータを特定するのは、非常に難しい(ほぼ無理)。
・bcryptアルゴリズムではハッシュ化する前にソルト化されたハッシュを追加している。
これにより、辞書攻撃やレインボーテーブル攻撃を防ぐことができる。

#②fixture(フィクスチャ)とは
・言葉自体は“`2.2 Usersリソース“` から登場している。
・本格的に扱ったのは “`8.2.4 レイアウトの変更をテストする“`
・テスト時に使用。
・データベースに追加するテスト用データをfixtureで作成できる。
・fixtureではERb(埋め込みRuby)を利用できる。

元記事を表示

[Ruby] pryで、矢印キーを押すと`^[[A`などと出てしまう現象の解決法

# 環境
– macOS 10.13.6
– Ruby 2.5.7
– Rails 6.1.3.1
– Docker 20.10.7
– Docker Compose v2.0.0-beta.6

# 現象
`pry`で矢印キーを押すと、次のような記号が現れてしまうようになってしまう。
例えば、矢印キーの↑を押すと、下記のような`^[[A`という文字が表示されてしまいます。
![スクリーンショット 2021-08-01 23.22.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481105/753ef085-b069-0907-5a85-ecaaf1c1c2bf.png)
その他、矢印キーの→を押すと`^[[C`、矢印キーの←を押すと`^[[B`が表示されます。
# 原因
最近私はDockerのバージョンを`20.10.7`にUpgradeしたのだが、それに伴ってDocker Composeのバージョンがbeta版になってしまっていた。
つまりDocker Compose V2がデフォルトで有効に

元記事を表示

binding.pryを使えるようになりたい!

# はじめに
本記事は、「binding.pry」を今後活用できるようにするため、
現時点で学習したことをアウトプットします。

# インストール
`pry-rails`というGemをインストールする必要があります。
Gemfileに以下のコードを記述します。

“`ruby
gem ‘pry-rails’
“`

その後、ターミナルにて`bundle install`します。
「binding.pry」に限らず、Gemをインストールする際には、`bundle install`します。

エラーが発生した場合、原因がどのコードにあるのかを「binding.pry」を使って確認することができます。

コードで「binding.pry」という文字列をコード内に記述すると、
そこで、処理が止まります。
その後からの処理の結果を手動で確認することができます。

# 例文

“`ruby
class OrdersController < ApplicationController def index @order = Order.new end def create

元記事を表示

OTHERカテゴリの最新記事