- 0.1. Ruby sliceメソッド
- 0.2. 【Ruby on Rails】valitationの冗長をなくす方法
- 0.3. デバックの考え方
- 0.4. ?【Ruby入門】ファイル読み込みから採点する簡易機能実装
- 0.5. ?【Ruby入門】Arrayを使っておみくじを実装してみる
- 0.6. ?【Ruby入門】puts、print、p、ppメソッドの違い
- 0.7. Rubyのdigをpythonでやる
- 0.8. Gem fileにてGemを取り込む方法 Gemfile.lockの説明
- 0.9. 【Ruby on Rails】ルーティングのネストで発生するActionController::UrlGenerationErrorの解消方法
- 0.10. 10の倍数の差が2以内で条件分岐する方法
- 0.11. Railsのモデルにscopeを定義する場合の注意点
- 0.12. array pushってこんな動きだったっけ? ?
- 0.13. Ruby 計算プログラムの作成
- 0.14. ransackのselectボックスでenumのi18nを使用する
- 0.15. Ruby if, else問題
- 0.16. Rubyのデバッガ byebugの全コマンド一覧表
- 0.17. 7つのアクション
- 0.18. 【議事録】/packs/js/application-xxxxxxx.jsがNot Found(404)になる問題と解決法
- 0.19. 2022年最も見逃せない有用なGemまとめTOP58 (日本語訳)
- 0.20. 【devise_token_auth】rack (2.2.4) lib/rack/utils.rb:464:in `[]=’の解決方法
- 1. 症状
Ruby sliceメソッド
# sliceメソッド
配列や文字列から、指定した要素を取り出すことができるメソッドです。“`ruby:例
# 配列を作成します
array = [0,1,2,3,4,5,6]# 配列から引数で指定した要素を取得します
ele1 = array.slice(1)
puts ele1
#=> 1 # 0番目から始まるため、1が取り出されました# 配列番号-4から4つ分の要素をsliceします
ele2 = array.slice(-4,4)
puts ele2
#=> 3, 4, 5, 6# 配列はもとのままです
puts array
#=> [0,1,2,3,4,5,6]
“`# sliceメソッドを使って指定した文字列を取り出すプログラムを作成します
条件は以下です。
– 条件1:対象の文字列から末尾にある2文字を取得すること
– 条件2:取得した2文字を3回繰り返して出力すること“`ruby:模範解答
def extra_end(str)
right2 = str.slice(- 2, 2)
puts right2 * 3
end#
【Ruby on Rails】valitationの冗長をなくす方法
# 前提条件
– Ruby 3.1.0
– Rails 7.0.4# 背景
全てのカラムに対して同じバリテーションを設定すると、下記のように同じ記述が繰り返され冗長性がある状態である。
“` ruby:User.rb
class User < ActiveRecord::Base validates :name, presence: true #冗長性あり validates :email, presence: true #冗長性あり validates :age, presence: true #冗長性あり validates :password, presence: true #冗長性あり end ``` # やりたいこと バリテーションの冗長性をなくしたい。 # 方法 ### with_optionsブロックを使う 下記のようにwith_optionsブロックでpresenceをまとめることで、ブロック内のカラムすべてに適用されるようになる。 ``` ruby:User.rb class User < Active
デバックの考え方
◎デバッグとは
意味:バグを無くす
デバックは、プログラミングに問題があった時にそれを解決すること。○初心者にとって特に重要!!→なぜ重要なのか?
・自走力を身につけるため
プログラマーとして仕事をするには、自分で問題を解決するのが重要
・学習効率を向上させる
一般的なデバッグの知識は付け焼き刃の知識ではない。
すべてのプログラミングの学習に通じる考え方なので応用が効く。○どうやってやるのか?
STEP1
証拠集め(情報収集)
STEP2
証拠を解釈(情報の意味を把握)
STEP3
犯人を推理(原因を推測)・具体的に
STEP1
証拠集め(情報収集)
・エラーが、出ている確認! 一番大事
エラーは、最大のヒントです。ダイイングメッセージみたいなもの
読まないのはもったいない!!・どういう場合に動かなくなるのか?
何をした時に動かなくなるのか?どこまで動いている?
ブレークポイントなどを使いどこまで確実に動いているのか確認する※もし証拠がない場合でも、証
?【Ruby入門】ファイル読み込みから採点する簡易機能実装
Rubyを使って、ファイル(txt)を読み込んで、採点できるような簡易機能を実装してみました。:writing_hand:
## 前提
– ファイル構成
– scoring.rb
– test.txt(問題の回答を改行して記載したとする)
– 考慮していない点(簡易版なので。。:angel_tone2:)
– ファイルの存在チェック
– 回答が不十分の場合(回答が3つ未満、4つ以上の場合)
– 全問正解しか判断できない、不正解があった時に何個不正解なのか、何個正解なのか分からない
– エラーハンドリング
– etc..## ファイル
“`ruby:scoring.rb
answer_arrays = [‘1’, ‘2’, ‘3’] # 答えを配列で管理する
index = 0
is_incorrect_answer = false # 不正解があった場合 true にするfilename = ARGV[0] # コマンドラインからデータを入力する ex. ruby scoring.rb test.txt
file = File.open(file
?【Ruby入門】Arrayを使っておみくじを実装してみる
[class Array(Ruby 3.0)](https://docs.ruby-lang.org/ja/3.0/class/Array.html)を用いておみくじを作ってみよう。:pencil2:
“`ruby:sample.rb
omikuzi_array = [‘大吉’, ‘吉’, ‘中吉’, ‘小吉’, ‘末吉’, ‘凶’, ‘大凶’]p omikuzi_array.sample
# => “大吉”
p omikuzi_array.sample
# => “小吉”
“`## 解説
– Arrayの[sampleメソッド(Ruby 3.0)](https://docs.ruby-lang.org/ja/3.0/class/Array.html#I_SAMPLE)を使用しました。
– ランダムに要素を取得してくれる。([Kernel.#srand(Ruby 3.0)](https://docs.ruby-lang.org/ja/3.0/class/Kernel.html#M_SRAND)が有効)
– `Arrayの#sample(n)`のように要素を指定し
?【Ruby入門】puts、print、p、ppメソッドの違い
「puts、print、p、pp」は出力用のメソッドで使用されますが、改めて違いに関して整理したいと思います。:pencil2:
## puts
– オブジェクトを出力後に**改行**する。
– [Kernel.#puts(Ruby 3.0)](https://docs.ruby-lang.org/ja/3.0/method/Kernel/m/puts.html)“`ruby:sample.rb
puts ‘hellow’, ‘world’
# => hellow
# => world
“`
– オブジェクトを出力後に**改行**しない。
– [Kernel.#print(Ruby 3.0)](https://docs.ruby-lang.org/ja/3.0/method/Kernel/m/print.html)“`ruby:sample.rb
print ‘hellow’, ‘world’
# => hellowworld
“`## p
– オブジェクトを出力後に**改行**する。
– 引数で渡されたオブジェクトがそのまま戻り値になる。
Rubyのdigをpythonでやる
## 課題
ネストされたdictから特定の値を取り出したいとき## Rubyの場合
以下のように、nullチェックをしながらいい感じに取り出してくれる
“`rb
data_a = { ‘name’: { ‘first_name’: ‘yamada’, ‘last_name’: ‘taro’ } }
data_b = { ‘name’: { ‘last_name’: ‘taro’ } }p data.dig(‘name’, ‘first_name’)
# => yamadap data.dig(‘name’, ‘first_name’)
# => nil
“`## Pythonの場合
digのようなメソッドはないので愚直にやると以下のような方法になる。
“`py
data_a = { ‘name’: { ‘first_name’: ‘yamada’, ‘last_name’: ‘taro’ } }
data_b = { ‘name’: { ‘last_name’: ‘taro’ } }if ‘name’ in data_a and ‘first_name’ in
Gem fileにてGemを取り込む方法 Gemfile.lockの説明
使用しているVer ruby 2.6.5 Rails 6.0.6.1
○Gemとは?
誰かが作ったものを活用するために、Gemが存在します。
プログラマーでよく言われる言葉で、「車輪の再発明をしない」
この言葉の元Gemというものがありそういったもの総称をライブラリーとも言います。
ライブラリーは有名な言語であれば必ず存在します。○早速Gemを取り込んでいきたいと思います
まずGem fileにてGemの名前を書き込みます。
今回はfakerを取り入れます。
下記をGem fileに記入
gem ‘faker’
ターミナルにて、$ bundle install
と実行。※$は記入しません。
以上でfakerのダウンロード完了です?・READMEのドキュメントに使い方やインストールのやり方が記入されています。
https://github.com/faker-ruby/faker
もし、他にも取り入れたいgemがあれば、READMEを参考に使用するか
全て英語で分かりづらい時は、有名なgemであれば検索して日本語で出てくるかと思
【Ruby on Rails】ルーティングのネストで発生するActionController::UrlGenerationErrorの解消方法
# 前提条件
– Ruby 3.1.0
– Rails 7.0.4# エラー事象
ルーティングのネストは正しく記述されているはずなのに、Prefix`new_user_food_path`が利用できない。ActionController::UrlGenerationErrorが発生する。
“` ruby:config/route.rb
resources :users do
resources :microposts
end
“`
“` user/show.html.erb<%= link_to "新規投稿", new_user_micropost_path %>“`
# 原因
### new_user_micropost_pathの引数にユーザ情報がなかった
`$ rails routes`でルーティングをよく見ると、
`new_user_micoropost`のURI Patternは`/users/:user_id/~`、
`user`のURI Patternは`/users/:_id/~`
10の倍数の差が2以内で条件分岐する方法
復習しアウトプットします。
“`ruby:
正の整数を入力し、その整数が、10の倍数(10,20,30…)からの差が2以内であるときはTrueそれ以外はFalseを出力するメソッドを作成
>出力例:
near_ten(12)→True
near_ten(17)→False
near_ten(19)→True
“`“`ruby:自身の回答
def near_ten(num)
if num_x = num % 10
num_x <= 2 || num_x >= 8
puts “True”
else
puts “False”
end
end
“`
“`ruby:模範解答
def near_ten(num)
quotient = num % 10
if quotient <= 2 || quotient >= 8
puts “True”
else
puts “False”
end
end
“`惜しい。。。。惜しいい!!!!!
悔しい。笑# アプトプット解説
“`diff_ruby:
def
Railsのモデルにscopeを定義する場合の注意点
## はじめに
自分用のメモになります。## 結論
find_byなどのnilを返すメソッドをscopeに設定しない## なぜなら
モデルのscopeでnilが返される条件が発生すると、該当のscope検索結果を無視した、クエリを発効してしまう。Humanモデル
“` ruby:human.rb
class Human < ApplicationRecord enum :gender, { male:0, female: 1} scope :find_gender, -> (gender) { find_by(gender: gender) }
scope :tall_people, -> {where(“height > ? “, 160)}
end“`
DB
“` ruby:
class CreateHumen < ActiveRecord::Migration[7.0] def change create_table :humen do |t| t.string :name t.integer :hei
array pushってこんな動きだったっけ? ?
# なんかおもったプッシュと違う
さっそくコードと結果
“`
@select_count = Array.new(9, [])p @select_count[8]
p @select_count[8].push(38)
p @select_count
“`予想してた結果
“`
[]
[38]
[[], [], [], [], [], [], [], [], [38]]
“`結果
“`
[]
[38]
[[38], [38], [38], [38], [38], [38], [38], [38], [38]]
“`# なんでこうなったか
2次元配列の初期化の方法が間違っていた
“`
@select_count = Array.new(9){ Array.new() }p @select_count[8]
p @select_count[8].push(38)
p @select_count
“`結果
“`
[]
[38]
[[], [], [], [], [], [], [], [], [38]]
“`予想通りになりました。
# ま
Ruby 計算プログラムの作成
# 計算プログラムの作成
二桁以上の整数を入力すると、十の位と一の位の数字の足し算、十の位と一の位の数字の掛け算をそれぞれ行います。
最後に2つの結果を足し合わせて出力するプログラムを作成します。“`ruby
def addition(a, b)
a + b
enddef multiplication(a,b)
a * b
enddef slice_num(num)
tens_place = (num / 10) % 10
ones_place = num % 10
return tens_place, ones_place
endputs “二桁の整数を入力してください”
input = gets.to_iX, Y = slice_num(input)
add_result = addition(X, Y)
multiple_result = multiplication(X, Y)puts “足し算結果と掛け算結果の合計値は#{add_result + multiple_result}です”
“`## 解説
このプログラムをター
ransackのselectボックスでenumのi18nを使用する
# はじめに
ransackのselectボックスでenumのi18nを使用する時に記載方法に迷ったのでメモを残します### 理解していないとハマること
・enumを使用すると、実際にDBに保存されているのは対応づけられたinteger(数値)であること
・ransackはその数値に基づいて検索をかけていること
・selectボックスを検索条件に設定した時のHTML構造を理解すること
(valueの値がenumで設定した名前(文字列)になっていること)
“`“`
### ポイント
“`
Admin.statuses_i18n.invert.map { |key, value| [key, Admin.statuses[value]] }
“`
key・・・enumで設定した名前(文字列)
value・・・enumで対応づけられたinteger(数値)### 間違えていたこと
ransa
Ruby if, else問題
# if, else問題
Aさんは普段土日が休みの仕事に就いており、休みの日は遅くまで寝ていたいと考えています。
そこで、Aさんのために「その日が遅くまで寝ていられるかどうか」を判断するプログラムを作成します。第一引数の値では「平日かどうか」、第二引数の値では「休暇かどうか」をtrueまたはfalseを用いて以下のように表します。
– 条件1:第一引数がtrue(平日である)または、第二引数がtrue(休暇である)の場合はtrueと出力する
– 条件2:第一引数がfalse(平日でない)または、第二引数がtrue(休暇である)の場合はtrueと出力する
– 条件3:第一引数がtrue(平日である)または、第二引数がfalse(休暇でない)の場合はfalseと出力する
– 条件4:第一引数がfalse(平日でない)または、第二引数がfalse(休暇でない)の場合はtrueと出力する“`:雛形
def sleep_in(is_weekday, is_vacation)
# ここに条件式を実装する
end# 呼び出し例
sleep_in(false
Rubyのデバッガ byebugの全コマンド一覧表
こんにちは。toC向けプロダクトのフロントからバックエンド領域の開発を担当している[hideki_okawa](https://twitter.com/hideki_okawa)です。
最近では、バックエンドでRuby on Railsを用いて開発することが多いです。## なにこれ?
今回は、Rubyのデバッガである [byebug](https://github.com/deivid-rodriguez/byebug) の全コマンド一覧表です。
全コマンドを知るモチベーションとして、デバッガで出来ることを知っておくことは今後の開発を効率よく進めるために重要だと考えたからです。
「道具の使い方を学ぼう」的なことは、かの有名な [達人プログラマー](https://www.amazon.co.jp/%E9%81%94%E4%BA%BA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC-%E7%AC%AC2%E7%89%88-%E7%86%9F%E9%81%94%E3%81%AB%E5%90%91%E3%81%91%E3%
7つのアクション
本日は7つのアクションについて投稿します。
○アクションとは
—
ユーザー側からリクエストされた内容を実行、処理する事。使い方
““`
def index
~~
~~
end
““`
こんな感じで使います。○7つのアクション詳細
———| アクション名 | 内容 |
|:-:|:-:|
| index(インデックス) | 一覧表示する |
| show(ショー) | 詳細表示する |
| new(ニュー) | 生成する |
| create(クリエイト) | 保存する |
| edit(エディット) | 編集する |
| update(アップデート) | 更新する |
| destroy(デストロイ) | 削除する |これが7つのアクションです。
使い方をしっかり学んでアプリ作成に生かしていきます!
本日はここまで!ありがとうございました!!
【議事録】/packs/js/application-xxxxxxx.jsがNot Found(404)になる問題と解決法
# はじめに
– 本記事は、議事録としてまとめたものになります。
– 他の方の参考になる可能性も踏まえて、一般公開も行なっております。
– また記載内容はすべて、正しい内容が記載されているとは限りません。
– 誤った内容を見つけた場合は、ご指摘をお願いいたします。# この記事は誰向けの記事か?
– AWS(EC2)で稼働させているアプリをSSL化した後、一部機能でエラーが発生して困っている人
– Google検索で「packs/js/application-xxxxxxx.jsがNot Foundになる」と検索しても、解決しない人
– 検証ツール上で、以下のようなエラーが発生している人
![スクリーンショット 2023-02-10 21.23.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3079289/24ea02df-9ff2-65c6-f418-d675c1a6a481.png)
/packs/js/application-xxxxxxx.js net::ERR_ABORTED 404
2022年最も見逃せない有用なGemまとめTOP58 (日本語訳)
以下の記事の日本語訳です
# 2022年最高のgems
Rubygems.orgの公式レポートでは、2021年に最もダウンロードされたgemsについて言及します。
これにより、ruby on railsの開発者が何を使っているのか、どのrails gemが最も便利なのかわかります。### Rubyの便利なGemsとその使い勝手
gemを以下のようにいくつかに分類しました。
– Activecord
– View Helper
– Authentication & Authorization
– Debugging
– Testing
– Admin View
– File Upload
– Deployment
– Code Quality
– Payment
など## Activecord
#### 1. Activecord Import
ActiveRecord-importを使用すると、大量のレコードを簡単に挿入することができます。ActiveRe
【devise_token_auth】rack (2.2.4) lib/rack/utils.rb:464:in `[]=’の解決方法
症状
device_token_authを使って認証機能を実装しようとしたところ、以下が表示されました。
翻訳すると、「nil:NilClass の未定義メソッド」でした。
“`terminal:error
NoMethodError (undefined method `downcase’ for nil:NilClass):
rack (2.2.4) lib/rack/utils.rb:464:in `[]=’
rack (2.2.4) lib/rack/utils.rb:432:in `block in initialize’
rack (2.2.4) lib/rack/utils.rb:432:in `each’
rack (2.2.4) lib/rack/utils.rb:432:in `initialize’
rack (2.2.4) lib/rack/utils.rb:425:in `new’
rack (2.2.4) lib/rack/utils.rb:425:in `[]’
rack (2.2.4) lib/rack/etag.rb:29: