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

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

テストコード データ型の注意点

単体テストコードの記述の注意点。

“`ruby
first_name_kana_full_width { ‘タナカ’ }
last_name_full_width { ‘太朗’ }
last_name_kana_full_width { ‘タロウ’ }
birthday { 1955_01_01 }
“`
最初はこのような記述をしコミット、プッシュしていたがレビュワーの方から
生年月日(birthday)はデータ型なので値をクォーテーションで囲む必要があるとのことだった。
以下のように修正するとテストを実施する際に今まで問題なくできていた
テストコードの部分でエラーがターミナルで発生…

“`
errors: Birthday can’t be blank
“`

しかし付随するusers.rbの記述には以下のように記述しておりエラーの原因が分からなかった。

“`ruby
FactoryBot.define do
factory :user do
name { ‘田中tanaka’ }
email {Faker::Inter

元記事を表示

ransackで入力した値が、営業時間内か検索する。

#はじめに
現在デートスポットのレビューサイトを作成中です。
検索した時間が、営業時間内に入っていれば表示する検索機能を実装しようとしたら、なかなか実装できませんでした。
その実装方法を記事にしてみようと思います。

#modelの概要
“`
create_table “date_spots”, charset: “utf8mb4”, collation: “utf8mb4_0900_ai_ci”, force: :cascade do |t|
t.integer “genre_id”
t.string “name”
t.datetime “opening_time”
t.datetime “closing_time”
t.datetime “created_at”, precision: 6, null: false
t.datetime “updated_at”, precision: 6, null: false
end
“`
始業時間(opening_time)と終業時間(closing_time)がデートスポットごとに決

元記事を表示

ド忘れしていたRubyの基礎5選④

どうも、三町哲平です。

https://qiita.com/TeppeiMimachi/items/a0a449a1d2f0897fa6e2

ド忘れしていたRubyの基礎5選の第4弾です。

今回は、コチラの問題を解く際を想定
[Reverse Integer – LeetCode](https://leetcode.com/problems/reverse-integer/)

解き方は、コチラを参照
[Ruby Solution – LeetCode Discuss](https://leetcode.com/problems/reverse-integer/discuss/337885/Ruby-Solution)

# 1. 後置if

“`ruby
# 普通のif文
if foo
bar
end

# 後置ifを使ったif文
bar if foo
“`
可読性の観点からも後置ifの多様には注意が必要です。

引用及び参考記事:[【Ruby】乱用厳禁!?後置ifで書くとかえって読みづらくなるケース – Qiita](https://qiita.com/jnchito

元記事を表示

[Ruby] Arrayメソッドで使うfirstとlastとそれ以外について

Rubyには配列メソッドとして`first`と`last`というものが存在します。

“`
[0,1,2].first
=> 0

[0,1,2].last
=> 1
“`

それぞれ配列の要素の最初と最後を取得するメソッドです。
それ以外のやり方として`second`,`third`,`fourth`,`fifth`があります。
使い方は以下のようになります

“`
[1,2,3,4,5].second
=> 2

[1,2,3,4,5].third
=> 3

[1,2,3,4,5].fourth
=> 4

[1,2,3,4,5].fifth
=> 5
“`
それぞれ配列の2,3,4,5番目から要素を取得します。

元記事を表示

【第1回】RailsのN+1問題と解決するためのメソッド完全版

この記事では、N+1問題の正しい理解と、解決するためのメソッドを紹介します。
第1回では、N+1問題とはなにか、そしてどのような状態で発生するのかを具体例とともに解説します。
この記事を読むことで、N+1問題の正しい理解、ケースに応じたN+1問題を解決するメソッドの使い分けができるようになるはずです。

##本記事の内容
* N+1問題とは
* N+1問題が発生する状況
* SQLが発行されるタイミング

##開発環境
* Ruby 2.7.2
* rails 6.1.0

##アソシエーション
![スクリーンショット 2021-06-22 22.36.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642155/f4609885-52cf-59ef-fdba-a37e001d40d0.png)
“users“テーブルと“posts“テーブルが1対多の関係でアソシエーションされています。
ユーザー1人に対して、投稿を複数持っている基本的な構成です。

それではさっそくいきましょう。

##N

元記事を表示

ド忘れしていたRubyの基礎5選③

どうも、三町哲平です。

https://qiita.com/TeppeiMimachi/items/f3a9047dffdbc119df27

ド忘れしていたRubyの基礎5選の第3弾です。

今回は、コチラの問題を解く際を想定
[(4) Palindrome Number – LeetCode](https://leetcode.com/problems/palindrome-number/submissions/)

解き方は、コチラを参照
[(4) 5 line Ruby Solution > 99% of Ruby Solutions – LeetCode Discuss](https://leetcode.com/problems/palindrome-number/discuss/267430/5-line-Ruby-Solution-greater-99-of-Ruby-Solutions)

# 1. reverseメソッド
reverseメソッドとは配列の要素の順番を反転させるメソッドです。

“`ruby
trains = [“赤色”, “白色”, “青色”,

元記事を表示

[Ruby]半角スペースで区切られた整数の足し算

## はじめに
piazaの問題で躓いてしまったので、学習したことをアウトプット!

## コード

“`ruby:qiita.rb
nums = gets.split(‘ ‘).map(&:to_i)
#splitで(’ ‘)で区切って文字列を分割し配列を作る。
#mapで区切られたそれぞれの文字列を数値化する。
result = nums[0] + nums[1]
# 配列内の文字列を足す。
puts result
“`

## こっちの方がシンプル
“`ruby:qiita.rb
num1, num2 = gets.split.map(&:to_i)
puts num1 + num2
“`

##splitメソッドとは
Stringクラスで用意されている文字列を指定の文字や正規表現を使って分割するメソッド。

“`ruby:split.rb
split([sep[, limit]])
# 第一引数に指定したパターン(文字列や正規表現)に従って、文字列も分割し配列にする
# 第二引数を指定して分割数を指定する
# 引数を指定しない場合にが、空白文字列で分割する

str

元記事を表示

AWSにデプロイ後ブラウザに反映されない問題(コンパイル関連のエラー)

エラー内容

デプロイ環境をherokuからAWSに移行して、ブラウザで確認したところ表示されないエラーが起こりました。そこでssh接続して、クローンしたオリアプのディレクトリにてエラーログを確認すると以下のエラー文がありました。

“`terminal
ActionView::Template::Error (Webpacker can’t find application in /var/www/projects/motivate/public/packs/manifest.json. Possible causes:
“`

原因

自分はrailsのバージョン6を使用していたのですが、参考にした記事はrailsのバージョン5を使っており、その差異によってエラーが起こりました。具体的にはyarnとwebpackerが入っていないためコンパイルができないというものです。

解決策

原因にも書いた通りyarnとwebpackerが入っていないのが原因なので二つをインストールすればいいのですが適切なバー

元記事を表示

AcctveRecord::Relationを利用してSQL発行回数を抑える方法

## AcctveRecord::Relationとは?
ActiveRecord::Relationではデータベースへの問い合わせ結果ではなく、**あくまで「どのようなSQLが発行されるか」という情報が保持されているに過ぎず、実際にSQLの実行結果が必要になるまではデータベースへのアクセスは実行されません。**
これを利用することでデータベースとの通信回数を抑えることが可能になります。

なお今回の内容には関係ありませんが、メソッドチェインを使用するためにもこの設計は必要不可欠です。
なぜならメソッドを呼び出した途端にSQLが実行されてしまう場合、まとめて全ての条件をメソッドに渡す必要があるためです。

## SQLの発行回数を抑える実例
![user_product_like.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1053396/0c992fa7-6f3b-db7e-d0db-8baef2df2516.png)

このようなモデルを例にします。
idが1のユーザーのお気に入り商品を取り出す場

元記事を表示

中間テーブルを使ってタグ検索機能を実装したい。

## ゴール

アーカイブページには全てのアーカイブを一覧で表示していますが、タグを使って絞り込み検索ができるようにしたいと思います。

## model作成、DB設計

tagを管理するtagモデルとアーカイブと紐付けるための中間テーブルでtag_relationモデルを作成しました。
既に作っているarchivesテーブルと新しくタグを管理する 、tagsテーブル、それから中間テーブルとしてtag_relationsテーブルを作成しました。

“`db/migrate/************_create_tag_relations.rb
class CreateTagRelations < ActiveRecord::Migration[6.0] def change create_table :tag_relations do |t| t.references :tag, foreign_key: true t.references :archive, foreign_key: true t.timestamps en

元記事を表示

【Rails】プルダウンで投稿の公開範囲を設定する方法

#イメージ

#はじめに

自分のみ閲覧できるように投稿したい!公開、非公開等投稿の公開範囲を設定したい!!!
と思った時に、該当する記事が見つからない!!!!!不便だなと思ったので、ここにまとめておきます。

#環境
この記事では以下の環境(2021年6月22日時点)で実装できました。

Ruby: 2.6.6
Rails: 6.0.3

#つけていないといけない機能
①ログイン機能
②投稿機能

#実装

既に作成したテーブルに新しくカラムを追加する場合は
カラムを追加するマイグレーションファイルを作成する。

「rails g migration クラス名 カラム名:データ型」でコマンドを実行する。

例)tweetテーブルにprivacyカラムを追加する場合

“`
$rails g migration AddPrivacyToTweets privacy:string
“`

コントローラーにカラム名を追加する。
例):privacy

“`ruby:tweets_controller.rb
private
def tweet_params
p

元記事を表示

vscodeで{}ブロックを自動フォーマットして困った話

#はじめに
RSpecの勉強中に{}ブロックが`do…end`に変換されてしまって困った。その時の対処についてです。

#症状
“`rspec
it “does not delete the project” do
sign_in @user
expect do #ココ
delete :destory, params: { id: @project.id }
end.to_not change(project, :count) #ココ
end
“`
上記のコードを記述すると、画面遷移時に`expect{}`と書いた部分が`expect do…end`となって ~~RSpecを走らせることができなかった。~~

#誤りについて
追記:2021/06/23
@jnchitoさんからコメントを頂きました。
上記の内容でエラーを再現したところ、問題なく`Rubocop`が走ることを確認しました。

よく考えてみれば、`rubocop`自体は走った上で違反に引っかかっていただけの記憶もあります。となると上記の打ち消し線の表現は正しくありませんでした。

元記事を表示

[Ruby]Arrayメソッド fromとto の使い方

## はじめに
Railsで使えるArrayメソッドの`from`と`to`を使用したので備忘録として残しておきます。

## 使い方

#### 1. from
`from`は引数に指定した位置から配列の最後までの要素を配列として返します。

“`
[0,1,2,3].from(2)
=> [2,3]
“`

#### 2. to
`to`は引数に指定した位置まで要素を配列として返します。

“`
[0,1,2,3].to(2)
=> [0,1,2]
“`

元記事を表示

webpackerでBootstrap4の導入

# 初めに
Railsでwebpackerを使ってBootstrap4の導入方法のまとめ。
# 導入手順
1. Gemfileにwebpackerを追加して、インストール
(今回は既に入っていたので、飛ばしてます。)
“`Gemfile
gem ‘webpacker’, ‘~> 3.5
“`
2. bundle installの実行
3. Webpackerをプロジェクトにインストール
 `bundle exec rails webpacker:install`
これでWebpackerを実行するための各種ファイルが生成。
4. app/javascript以下にsrcというディレクトリを作成し、application.scssを作成。
ディレクトリはapp/javascript/src/application.scssとなる。
4. Bootstrapの導入
`yarn add bootstrap@4.3.1 jquery popper.js`を実行
5. BootstrapのJSをapp/javascript/packs/application.jsで、
C

元記事を表示

Carrierwaveの実装 

## はじめに
画像登録の実装の際に、carrierwaveを用いて実装しました。
その時に調べたこと感じたことの記録です。
## 結論
実装自体は単純で、使い勝手が良い。
ドラッグ&ドロップなどにも対応可能。
## 手順
### 1. インストール
ターミナル上で以下のコードを実行し、最新版のcarrierwaveをインストール
`$ gem install carrierwave`
Gemfile内に以下を追加
`gem ‘carrierwave’, ‘~> 2.0’`
### 2. 実装
1. `uploader`の実装
以下のコードを実行して、`uploader`を実装する。
“`terminal
$ bundle exec rails generate uploader ###
“`
`###`の部分は`image`や`avator`など、その時のカラムに合わせて変えてください。
そうすると
“`
app/uploaders/###_uploader.rb
“`
というファイルが作成されている。
中身は「保存先の指定」「アップロードする画像の種類」などの指定ができる。

元記事を表示

gem installでおかしいことになった

# はじめに

100億年ぶりにgem installをしたらハマったのでメモ的なのでここに残しておきます

# 環境

* MacOS 10.15.7
* zsh
* ruby 2.6
* rbenv <- ここ重要 # ことの発端 gemで[fluentd](https://docs.fluentd.org/installation/install-by-gem)をインストールしようとしたら以下のようなエラーが出てしまいました。 ``` $ gem install fluentd --no-doc Building native extensions. This could take a while... ERROR: Error installing fluentd: ERROR: Failed to build gem native extension. current directory: /Library/Ruby/Gems/2.6.0/gems/msgpack-1.4.2/ext/msgpack /System/Library/Fram

元記事を表示

1人目が2人目をフォローする、2人目が3人目をフォローする… の様なズレと組み合わせを生成するアルゴリズム[Ruby](zip, rotate)

1人目のユーザーが2人目のユーザーをフォローする。
2人目のユーザーが3人目のユーザーをフォローする。…など、
少しずれた関係性を生み出す際に利用可能なアルゴリズムを考えついたのでここで共有します。
2つのメソッドを組み合わせる事で、生成することが可能です。

## 結論

“`ruby
users = User.all
users.zip(users.rotate) do |following_user, followerd_user|
following_user.follow(followerd_user)
end

省略形
User.all.zip(User.all.rotate) { _1.follow(_2) }
“`

恐らくこれで動作すると思います!`follow`というtwitterなどで用いられる関係性を生み出す独自メソッドです。省略形はruby2.7以降で動作すると思います!

### rotate メソッド

https://docs.ruby-lang.org/ja/3.0.0/method/Array/i/rotate.html

“`ruby

元記事を表示

[Ruby]スキルチェックDの足し算問題/配列のデータ型を変更

https://paiza.jp/works/mondai/skillcheck_sample/addition

足し算 (paizaランク D 相当)の問題を解いてみました。(プログラミング初心者です。)
ちなみに練習問題なので、コードの公開はokのようです。

順を追って答えを導きたいと思います。
もっと綺麗な答えがあるように思いますが、今ある知識で回答を導きたいと思います。

①値を配列に格納

まず横1行で与えらえる値2つ(今回1と1とします)を受け取り、配列に入れてしまいます。

“`
line=gets.split(” “)
“`

②失敗!普通に足してみた 

これで、p numberで出力すると、[“1”, “1”]と配列に格納されます。
配列を取り出して足せばいいかなと思ったのですが、
配列の中身が文字列stringになっているため、
↓こうしてしまうと、、11と出力されます。

“`
puts line[0]+line[1]
“`

配列のデータ型を変えるには??

わからなかったので調べました。
以下のコ

元記事を表示

Rails Tutorialをローカル環境で始めるためのセットアップ例-for windows10

初投稿です。
普段はJavascriptを中心にフロントエンドの勉強をしているのですが、Web開発について体系的に勉強していきたいなと思い、Rails Tutorialをやってみることにしました。ボリューム感もお手頃だし。

## はじめに

Rails Tutorialの第6版-1章ではAWSのCloud9(クラウドIDE)を用いた実行環境のセットアップが紹介されており、ややこしい環境構築をすっ飛ばしてすぐに学習が始められるよう配慮がなされています。(素晴らしい)
そのまま進めるのが安牌なのは分かっているのですが、変なところで凝り性な私は**「どうせやるならローカル環境でやりてえよ!!」**と思い、色々調べながら環境構築を進めました。

結論何とかなったのですが、案の定色々とハマってしまったので、これからローカル環境でRuby on rails(Rails Tutorial)を始めようとしている初学者の人~~(よしときゃいいのに)~~の一助になればと思い筆を執った次第です。

こんな記事を書いておいてなんですが、初学者の方にとってはかなり煩雑な作業になってくるかと思います(爆)**

元記事を表示

素朴な自作言語Pricのコンパイラをセルフホストした

自作言語 Pric のコンパイラがセルフホストできました!

https://github.com/sonota88/pric/tree/main/selfhost

# 概要

## これまでのあらすじ

これまで vm2gol(virtual machine to game of life)というプロジェクト名で以下のようなことをやってきました。

– (2018) [RubyでオレオレVMとアセンブラとコード生成器を2週間で作ってライフゲームを動かした話](https://qiita.com/sonota88/items/f9cb3fc4a496b354b729)
– vm2gol-v1
– 高水準言語の代わりに構文木を直接書き、それをコンパイルして VM で動かすところまで

元記事を表示

OTHERカテゴリの最新記事