- 1. FactoryBot のまとめ
- 2. 【jbuilder】部分テンプレートのオプション
- 3. 【Rails】IN句の書き方
- 4. 【Rails】Routingのネスト,member, collectionの違い
- 5. 【Rails】SQLでor検索
- 6. 【Rails】複数レコード一括保存のRspecの書き方
- 7. 【Rails】左外部結合と内部結合
- 8. 「Ruby」where文で同じカラムで複数指定する方法
- 9. 【しくじり先生】失敗続きの未経験からのエンジニア転職1年間を振り返って最短で満足のいく転職をするにはどうすれば良いかを考えてみた
- 10. インチキをしてRailsでExcelを読み書きする
- 11. Rails 6.0 + Docker + MySQL5x + devise-token-auth での環境構築
- 12. 【Ruby】早期return
- 13. 【Rails】global source linesとは何か
- 14. webpackerによるStimulusのインストールでハマったこと
- 15. Ruby silver合格までにやったこと
- 16. 【Git】【Ruby】 Gemfile,Gemfile.lock変更後、git push後にエラー
- 17. M1でrails db:createが出来ない no suitable image found. Did find: (LoadError)諸々
- 18. rbenv global を出力してもversionが切り替わらない!
- 19. ruby on rails の環境設定をしたよ。
- 20. 【rubyでcomet2を作る】④プログラムを実行する
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 routesPrefix 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# 実