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

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

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

元記事を表示

webpackerによるStimulusのインストールでハマったこと

# はじめに
皆さん`Stimulus`を使っていますか?
`React`や`Vue`を使う程学べていないけど、`jQuery`は使いたくないって人におすすめのフレームワークです!
`JaveScript`の簡単なDOM操作ができる人なら学習コストはほぼゼロで使えます!

更に、`Webpacker`を導入している`Rails`ならコマンド一発でインストールできるのも魅力的です。

“`bash:ターミナル
rails webpacker:install:stimulus
“`
上記コマンドでインストールして[公式サイト](https://stimulus.hotwired.dev/)でサクッと勉強しながら皆さん良いStimulusライフを!

、、、としたかったのですが、インストールの際にエラーが発生して上手く動かなかったので修正点を備忘録として残しておきます。

# 前提
| 技術など | バージョン等 |
| —- | —- |
| ruby | 2.7.4 |
| Rails | 6.1.4 |

> 執筆時点の日時は2021/11/27です。

元記事を表示

Ruby silver合格までにやったこと

①チェリー本を改めて1周した
②RExを9割以上になるまでやる

  • https://rex.libertyfish.co.jp/
  • ③ネットにある問題はやっておく

  • https://gist.github.com/sean2121/945035ef2341f0c39bf40762cd8531e0
  • http://www.minituku.net/courses/1049510743/contents/775230600.html
  • ④問題を解いている中でわからないORしらないものは片っ端からGoogle先生にお世話になる。&常にirbやエディタでコードを動かして挙動を確かめる。

    なんとなく気になるところを自分なりにまとめていたものです?

    – マジックコメント
    エンコーディングは`coding: エンコーディング名`の前後に任意の文字を入れても良い&大文字・小文字どちらでも可
    – `0x`でスタートする数値は**16進数リテラル**
    – `p [].size`は0になる。**nil**じゃない。
    – `p [].to_i(to_sも)`は0

    元記事を表示

    【Git】【Ruby】 Gemfile,Gemfile.lock変更後、git push後にエラー

    # 1. 概要

    Ruby on rails アプリ(開発環境の更新が本番環境に反映されるようGitHub Actions設定済み)
    にて、Gemfileに新機能を色々追加したり試したりした後
    git push後にエラー発生・・時に自分が解決したやり方を記載

    # 2.エラー内容/対処

    Githubのactionsから最新ワークフローを確認した際に
    Deploy時エラーが発生していた

    ![git.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294345/8a5d743c-3ee5-6447-a203-cf7e5e38c6cd.png)

    以下がエラー内容詳細

    “`
    Run echo “$PRIVATE_KEY” > private_key && chmod 600 private_key
    Warning: Permanently added ‘***’ (ECDSA) to the list of known hosts.
    From github.com:syokaturyou/sangok

    元記事を表示

    M1でrails db:createが出来ない no suitable image found. Did find: (LoadError)諸々

    M1でのrailsアプリ環境構築方法については[こちら](https://higukkublog.org/rails-m1/)でまとめています。

    環境
    rbenv 1.2.0
    ruby 3.0.2
    Bundler 2.2.32
    yarn 1.22.17
    DBはpostgresql

    ##rails db:createが出来ない問題
    `rails db:create`をすると
    ![スクリーンショット 2021-11-26 21.10.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1573515/35b2e33f-61d1-09f1-50eb-cb2109d0c1ee.png)
    このようなエラーが大量発生してしまいました。

    `no suitable image found. Did find: (LoadError)`とあります。
    何かがないのでしょう。(かなり曖昧)

    ##対処法
    “`
    arch -arm64 gem install msgpack bootsnap bindex zeitw

    元記事を表示

    rbenv global を出力してもversionが切り替わらない!

    ##背景
    AWSへのデプロイ中に
    EDITOR=vim bin/rails credentials:editをしたらversionが古いと言われたので

    “`
    bundle install
    “`

    を実行すると

    “`
    ERROR: While executing gem … (Gem::FilePermissionError)
    You don’t have write permissions for the /Library/Ruby/Gems/2.3.0 directory.
    “`

    訳: 許可がありません(ざっくり)
    と言われました。

    https://qiita.com/iron-smri/items/9300ccd5a59dc0fdf0ae

    ↑の記事を見ると、これが起こる原因はrbenvのversionがデフォルトのシステムを使っていて権限がないからエラーになると聞いたので、確かめてみるとシステムのversionを使っていました。

    そこでGemfileに記載されているrubyのversion3.0.2をセットしようと

    “`
    rbenv glo

    元記事を表示

    ruby on rails の環境設定をしたよ。

    railsの環境設定にかなり手こずったので、記録。
    これが初めての環境設定。

    Mac:11.2.2
    Ruby:3.0.0
    Rails:6.1.4.1
    rbenv:3.0.0

    まず 
    [progate](https://prog-8.com/docs/rails-env)

    に沿ってやろうとしたものの、ファイルを作る事ができず詰まる。

    rubyとrbenvのバージョンが合わないからではないかと仮説を立てた。

    https://qiita.com/hujuu/items/3d600f2b2384c145ad12

    この記事を参考にバージョンを合わせる。
    必要なgem(?)がないとエラーメッセージが出たので、指示に従う。
    合わせてエラーメッセージの読み取れなかった箇所を検索し、下記の記事に出会う。

    https://qiita.com/uasi/items/8be1490b1735dae05e6a

    私のrubyはバージョン3.0.0だったので、 

    [Ruby 3.0.0 リリース](https://www.ruby-lang.org/ja/news/2020/12/25/ru

    元記事を表示

    【rubyでcomet2を作る】④プログラムを実行する

    ### はじめに
    [【rubyでcomet2を作る】③CPUオブジェクト、メモリオブジェクトを定義する2](https://qiita.com/223yuta/items/dc5e95c6be7982e1f74f)の続きです。
    今回は、前回までに作成したCPUオブジェクト、メモリオブジェクトを使って、下記4つのプログラムを実行していきます。
    – 単純加算処理
    – 条件分岐処理
    – 繰返処理
    – サブルーチン処理

    普段簡単に書いているこのような処理をCPUではどのように処理しているのか見ていきたいと思います。

    [完成コード](https://github.com/223yu/virtual_pc)

    ###実行状況を見やすくする

    プログラムの実行状況を見やすくするために、下記変更を加えます。
    – 命令読出(フェッチ)後、実行する命令を表示する
    – 命令実行後、レジスタの状況を表示する

    “`ruby:cpu.rb
    # 命令の読み出し(フェッチ)
    ir = memory.send(“m#{pr}”)
    self.pr += 1

    # 実

    元記事を表示

    OTHERカテゴリの最新記事