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

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

[Ruby]破壊的メソッドと値渡しについて

# はじめに
本記事では、新しく知った`破壊的メソッド`と`値渡し`についてを記述します。
新しく知ったのでアウトプットしますが、
間違えている点があればご指摘いただけますと幸いです。

# 破壊的メソッド
レシーバになる`オブジェクトの値そのものを変更する`メソッド。
それ以降については、
オブジェクトの値が変更され、設定していたオブジェクトの値は破壊されてます。

“`ruby
food = “apple”
p food.upcase!
p food

# 結果は「APPLE」
“`

# 値渡し
私が学習している`Ruby`は`値渡し`になります。

`値渡し`とは、変数の値をコピーする渡し方になります。
メソッド内で値を変更しようが、結果は変わらないです。

“`ruby
def food(name)
name = orange
puts name # 結果「orange」
end

name = apple
food(name)

puts name # 結果変わらず「apple」
“`

## 破壊的メソッド実行
その場合は、`結果は変わります

元記事を表示

Rails6とBootstrap5

Rails6からはgemでjquery,bootstrapはいらないみたい。
その代わりにwebpackerを使用して、インストールする。

また、bootstrap5からはjqueryがいらない。

yarn install
$ yarn add bootstrap@next
$ yarn add @popperjs/core

package.jsonで確認できる。

application.html.erbに追加。(元から書いてあるコードは消さないよう注意。)
<%= stylesheet_pack_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>


hogehoge
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>

元記事を表示

Railsプロジェクトのペネトレーションテストで指摘事項

# 0. はじめに
これまで複数の企業にてRailsプロジェクトに携わらせていただきましたが、その中で何度かペネトレーションテストを行っていただく機会に恵まれました。そこで、本記事では過去に指摘されたことのある事項を紹介したいと思います。なお、ここで紹介した指摘はすべて修正済みとなっています。

# 1. Cookieセッションでログイン
### 指摘事項
Rails.application.config.session_storeで:cookie_storeが指定されており、Cookieが盗み取られると不正ログインができてしまう

### 対策
Railsはデフォルトではセッション情報はCookieのみに保存し、サーバーサイドで保存しません。これでは、Cookieが盗み取られてしまうと不正にログインが可能となってしまいます。そこで、redisやactiverecord-session_store[^1]を利用して、セッション情報をサーバーサイド側に持たせる必要があります。
リレーショナルデータベースを利用しているのであれば、activerecord-session_storeを利用す

元記事を表示

Active Storageに画像を投稿させようしたらundefined method `upload’ for nil:NilClassがでた

EC2にデプロイしたアプリケーションが、Active Storageに画像を投稿するアプリケーションでした。
なので、AWSのS3似画像と動画を保存させる必要がありました。

そこで、AWSのS3の設定をしよとしたら、見事につまりましたので、今回は備忘録として残していきたいと思います。

#現象

アプリにログインをして、画像を投稿しようとしたら、

“`
undefined method `upload’ for nil:NilClass
“`

のエラー画面がでてきました。
Backしてみたところ、画像がリンク切れのときのマークが出てくるようになっている。

前回記事でS3についての物を出した時のように、きちんとAWSのアクセスキーとシークレットアクセスキーをセットして、きちんとS3のコンソールでパブリック・アクセスも許可していて、更にバケットポリシーも問題なく動いていました。

なんで詰まったのかなと思ったので、とりあえず

##アプリケーションそのものを再起動してみたところ無事解決しました。

一回設定したら再起動しないいけないのですね。
知らなかった。

元記事を表示

9.22 振り返り RSpecいいねのエラー>>遅延評価 「ruby標準出力(まだよくわからない)」

“`
tail -f log/test.log
“`
“`
tail で後方から指定した行数分表示できる ログが見れる
“`
https://qiita.com/tatsumin0206/items/d2d98b6e94dd4f70f4ce

https://qiita.com/sobameshi0901/items/b963e7046e2ae8b8e813

【Rails入門】loggerの使い方まとめ

“`favorite.spec.rb
RSpec.describe “Staff::Favorites”, type: :request do
let(:staff){FactoryBot.create(:staff)}
let(:ostomy){FactoryBot.create(:ostomy)}
let(:patient){FactoryBot.create(:patient)}
let(:favorite){FactoryBot.create(:favorite, staff: staff, ostomy: ostomy)

元記事を表示

【Rails】form_withに関する基本知識

# form_withメソッドとは
フォームを実装するためのヘルパーメソッドです。
ヘルパーメソッドとは、主にビューでHTMLタグを出現させたりテキストを加工するために使用するメソッドのことです。
HTMLのformタグの代わりに使用できます。

**【例】HTMLのフォーム記述**

“`



“`
↓↓これをこのように書き換えることができます
**【例】ヘルパーメソッドを用いたフォーム記述**

“`
<%= form_with url: "/posts", method: :post, local: true do |form| %>
<%= form.text_field :content %>
<%= form.submit '投稿する' %>
<% end %>
“`

ヘルパーメソッドはRubyとして取り扱われるので、表示する

元記事を表示

【Rails】Cocoonを用いて親子テーブルの内容を任意の数だけ保存する。

#この記事/メモについて

本記事では”cocoon”というgemを用いて、モデルに紐づいた子モデルの内容を同時に保存できるようにします。

具体的には以下のようにして、
menuの投稿時にhas_manyで紐づいたfoodモデルを、
またfoodモデルにhas_manyで紐づいたmaterialモデルを任意の数だけ保存できるようにします。

![ezgif.com-gif-maker.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409257/1c95e397-6016-8a32-a49c-ebc9628fb38c.gif)

ここでは、表のような情報を開発者が入れる初期データとして保存していこうと思います。

menuモデル

| ID | name   | plan |
|:–:|:———–:|:————————:|
| 1 | 献立①   | 朝ごはん用  |
| 2

元記事を表示

ルーティングについて勉強しなおそう

#ルーティングとは
受け取ったリクエストを認識し、適切なコントローラ内のアクションの実行をするもの。

“`ruby
HTTPメソッド ‘パス’, to: ‘コントローラ名#アクション名’
“`
上記のような書き方でroutes.rb内に記述していく。

###凡例

“`ruby
#ルーティングの記述
get ‘/samples/:id’, to: ‘samples#show’

#HTTPリクエスト
Get /samples/21
“`
上記のようにルーティングされ、HTTPメソッドが送られてきたとする。このリクエストはsamplesコントローラのshowアクションに割り当てられて、paramsには{ id: ’21’ }というハッシュが含まれている。

元記事を表示

Windows10のWSL2(Ubuntu)でDockerを使ったRails環境構築

# はじめに
ちょっと間が空きましたが、[WSL2上のUbuntuでdocker/docker-composeを利用する](https://qiita.com/na-777/items/617fc64d512f20b8e457) からの続きで、Rails6の環境構築を実施していきます。

# 環境
– OS: Windows10 Pro 64bit
– Version: 20H2
– OS build: 19042.1237
– WLS2
– Ubuntu 20.04

# 設定手順
– 参照
– [Quickstart: Compose and Rails | Docker Documentation](https://docs.docker.com/compose/rails/)
– [Rails をはじめよう – Railsガイド](https://railsguides.jp/getting_started.html)

“`shell-session:WSL2コマンドライン
$ vi Dockerfile
“`

Ubuntuのデフ

元記事を表示

クラスを自作してオブジェクト指向を学ぶ

##経緯
習作としてQiitaを模した簡易版Webアプリを作成途中、オブジェクト指向を学ぶべく自作のクラスを作ることになったのでそのリファクタリングの経過を残す

##前提
記事(Article)クラスが存在

##環境
MacOS BigSur Ver11.5.2
Ruby 3.0.2
Rails 6.1.4.1

##広告クラス作り方
1. viewsにとりあえずの完成形を表示させてみる
2. controllersにコードを移して表示させてみる
3. modelsにコードを移して表示させてみる
4. adモデルを作ってarticleモデルから独立させてみる
(articleモデルの中に広告に関するメソッドがあるのは今後見づらいので)

### ①viewsに画像リンクベタ貼り
広告となる画像を5つ用意

“`app/views/articles/show.html.erb

[Ruby] AtCoder過去問 B – Count Balls

##はじめに
AtCoder過去問B問題をRubyで解いてみました。
変数名の付け方が下手くそなのは目を瞑ってください。
よろしくお願いします。

問題はこちらから確認してください↓

https://atcoder.jp/contests/abc158/tasks/abc158_b

##B – Count Balls
まずは入力を受け取ります。n, a, bと順番に受け取ります。

“`ruby
n, a, b = gets.split.map(&:to_i)
“`

a+bを1セットとして考えます。まずはnの中に、a+bが何セットあるか調べます。
そのセット数をball_setsの中に代入しておきます。

“`ruby
n, a, b = gets.split.map(&:to_i)

ball_sets = n / (a + b)
“`

次にセットからはみ出した(セットにできなかった)ボールを調べます。
“`n % (a + b)“`ではみ出したボールの数が分かります。
変数remainder_ballに入れておきます。

“`ruby
n, a, b = ge

元記事を表示

遅いRSpecのコードを改善したときのお話

# 初めに
Jenkinsサーバがやけに不安定で、高負荷の影響により503エラーが発生していました。これはまずいということで、原因を調べていたところ、めちゃくちゃ重いRSpecのコードを発見。これを改善したときのお話をここに書きます。

# 環境設定
– OS: Windows10 Pro 64bit
– Version: 1909
– OS build: 18363.1256
– WLS
– Ubuntu 20.04
– Ruby 2.7.2
– Rails 6.0.3.3

# 問題があるテストコードの特定
ローカルですべてのテストコード実行するのも時間かかるので、Jenkins上で実行しているテストコードの単位を分割して、様子見てみます。

“`shell:JobScript
# ディレクトリごとに分割して、実行 –profile オプションで遅いテストケースを20個ほど表示
bundle exec rspec –profile 20 spec/controllers/*
bundle exec rspec –profile 20 spec/dec

元記事を表示

DynamoDBの基本的な操作備忘録(AWS SDK for Ruby版)

# 扱える型

### スカラー型

– 数値
– BigDecimal型で返されるため、必要に応じて`to_i`メソッドでInteger型に直す
– 文字列
– バイナリ
– ブール
– `null`

### ドキュメント型

– リスト
– 複数の型を要素に持つことができる
– マップ

### セット型

ユニークで順序の保証されないリスト

– 数値セット
– 文字列セット
– バイナリセット

# データ取得

– `scan`
– テーブルのすべての項目を取得する
– 全てのカラムを条件に使用可能
– `query`
– パーティションキーの指定が必須
– ソートキーを指定しない場合、条件に合致する全てのレコードが返される
– `get_item`
– 1件に絞ってレコードを取得

### `filter_expression`

– 取得したデータに対し、結果セットを返す前に返すレコードを絞り込む条件を記述する
– 例:`filter_expression: ‘Age > :age’,` ※ `:age`

元記事を表示

ActiveRecord::RecordNotFound in HogeController#アクション Couldn’t find Board with ‘id’=n というエラーの原因

※完全に私の備忘録です。

アウトプットの習慣を身につけるために書いています。

実現したいこと

Ruby on Railsに置いて削除機能を実装したい

遭遇したエラー

“`
ActiveRecord::RecordNotFound in BoardsController#show

Couldn’t find Board with ‘id’=8
“`

該当ソースコード

“`ruby:/controllers/boards_controller
class BoardsController < ApplicationController def destroy @board = Board.find(params[:id]) @board.destroy redirect_to board_url, notice: '掲示板が削除されました!' end end ``` ```erb:/controllers/boards_controller

元記事を表示

【RSpec】expected `User.count` to have changed by 1, but was changed by 0というエラーの解決方法

#対象者

* タイトル記載のエラーに苦しんでる方
* RSpecテストのコードを書いている方

#目的

* エラーを解決して、テストを正常に稼働させる

#実際の手順と実例
###1.前提と現状

![スクリーンショット 2021-09-21 21.18.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1681213/ce96bf4f-b8a5-fbf8-131c-3a6a1e50f900.png)

ユーザーの新規登録が成功するかどうかのテスト実行時にこのようなエラーがでました、、、

直訳すると

““
User.count “が1だけ変化したと思ったら、0だけ変化していた。
““
 
推測すると新規登録が正常に行えず、Userが1人増えなかったということだと思いました。

該当ソースコードは以下の通り

““`spec/system/before_login_spec.rb
describe “ユーザー新規登録のテスト” do
before do

元記事を表示

【Rails】FontAwesomeの使い方/アイコンにアニメーションを付ける

FontAwesomeの使い方に関してアウトプットしていきます。
Qiitaへの投稿に不慣れなため、稚拙な部分もありますがご了承ください。

この記事の構成は下記の通りです。
①FontAwesomeのアカウント作成
②FontAwesomeの使用準備
③FontAwesomeの使い方
④アイコンの大きさや色を変えたり、アニメーションを付ける
⑤ブランドアイコン使用時の注意点

# ①FontAwesomeにアカウントを作成する
まずは自身のアカウントを作成する必要があります。
[Fontawesome公式ページ](https://fontawesome.com/)
![409580c4dec3457902a3768a8cbed3b7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1884909/628d3b84-3376-dfb0-4ded-f73c7d28a225.png)

Start for Free:無料。一部のアイコンのみ利用できる。
Get More with Pro:有料。全てのアイコン

元記事を表示

[ruby]約数を足し算する方法

# はじめに
本記事では、私が本日取り掛かった問題を備忘録として記述します。

# 内容
1111111111の約数で、1111以下の約数を足す。

divisor = 約数 by Google先生

“`divisors.rb
def divisors(num, limit)
(1..limit).select{ |i| num % i == 0 }.sum
end

puts divisors(1111111111, 1111)
“`

1~limitまでの約数で` (1..limit)`、
今回の数字(1111111111)がi(ある数)で割ると0になるもの達の`.select{ |i| num % i == 0 }`、
合計`.sum`を出す。

ターミナル上にて、

“`
% ruby divisors.rb
775
“`

`775`が答えです。
なるほど、プログラミングすごい。w

# 終わりに
このような数学の問題、解く分には好きなんですが、
如何せん実力不足の知識不足で、40,50分ぐらいかかります。

もっと経験して、解けるようにしたいと思います。

元記事を表示

[Ruby] AtCoder過去問 D – Caracal vs Monster

##はじめに
AtCoder過去問D問題にRubyで挑戦してみました。
よろしくお願いします。

問題はこちらから確認してください。↓

https://atcoder.jp/contests/abc153/tasks/abc153_d

##D – Caracal vs Monster
まずは入力を受け取ります。
その後処理に使用する変数xとx_aryという配列を準備します。

“`ruby
h = gets.to_i

x = 1
x_ary =[1]
“`

実はこれの答えはある程度答えが限られています。
例えばhが2であれば答えは3です。
hが3であっても答えは3です。

もしhが4だったら答えは7です。
5でも6でも7でも答えは7です。

hが8になると答えは15です。これもhが15までは答えは15なのです。

x_aryにmaxの“`1099511627775“`までの答えの数字を配列として入れていくのです。(10の12乗がこの数字)

先ほどのxとx_aryを利用してこれを表現します。

“`ruby
h = gets.to_i

x = 1
x_ary =[

元記事を表示

HTMLとCSSの役割と基本!

#結論!

HTMLは、Webサイトやアプリケーションなどの画面上に表示する『文字』『画像』『リンク』などの情報を記載する言語です!

CSSは、Webページの『文字の大きさ』や『色』を装飾するための言語です!

他にも『背景の色』や『レイアウト』なども指定することが出来ます!

#拡張子について!

拡張子とは、ファイルの種類を識別する為に、ファイル末尾につける文字列のことです!

例を書くと、HTMLのファイルであれば.html、CSSのファイルであれば.cssとなります!

#まとめ

それぞれを簡単に言うと!

HTML = ウェブサイトに表示される情報を記載する言語!

CSS = Webページの文字の大きさや色を指定することができる言語!

拡張子 = ファイルの種類を識別するためにファイル末尾につける文字列!

こんな感じですね!

ベテランの方からすれば、基本中の基本ですが、、、

まずは基本的な意味合いから、しっかり復習して行こうと思います!

何か説明で間違っていたらご指導お願い致します(_ _)

元記事を表示

Numo::NArray で二項演算としての最大値・最小値の計算

Ruby の多次元数値配列ライブラリ [Numo::NArray](https://ruby-numo.github.io/narray/) で**2つの配列を要素毎に二項演算したい**際、演算子のあるもの(例えば `ary1 + ary2` )は直感的ですぐわかるのだが、そうではない**最大値や最小値**の演算はどうすればいいのかわからなかった。インスタンスメソッドの `#max` などは、その配列内の要素を返すものであり二項演算ではない。

あるときAPIリファレンスのメソッド一覧を眺めていたら、それらしい名前のメソッドが目に留まった。ドキュメントには何の説明も無く自信を持てなかったが、調べたところ合っていそうなのでメモとして残しておく。

確認バージョン: 0.9.1.6 ( AtCoder で使えるもの)

## 計算方法
クラスメソッド `Numo::Int64.maximun(*args)` の類を使う。数値の型は自動で決定(拡張、upcast)してくれず、クラスを指定しなければならない。

“`ruby
require ‘numo/narray’

ary1 = Num

元記事を表示

OTHERカテゴリの最新記事