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

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

ActiveRecordモデルの拡張検討

ActiveRecordモデルの拡張方法にはいくつか選択肢があるので、どういった方法を選ぶのが適切かよくよく考えなおしてみたいと思います

## 今回のストーリー
新規ユーザーは必ず無料のサンプルを受け取ることができるので、ユーザーが作成されたときに、無料サンプル用の注文を作成したい
ただし、受け取れる無料サンプルは一人一つまでで、無料サンプルを提供する販売元と無料サンプルはコードで指定したい

販売元コード: DEFAULT
商品コード: JOIN

![スクリーンショット 2022-09-17 11.01.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89997/0445fa77-d120-534f-a95b-36a9d576133a.png)

## 2種類の拡張方法を試す
1. [scopeを使った拡張を使った拡張](#1scopeを使った拡張)
2. [AssociationExtentionを使ったhas_manyリレーションの拡張](#2associationextentionを

元記事を表示

Dockerにおいてソースコードが即時反映されない問題について

# 背景
現在就職のためのポートフォリオを作成しているのですがその際、Docker環境のrailsでソースコードを書 いているときにソースコードが即時反映されなかったので、即時反映される方法を記しておきます。

# 即時反映させる方法について
自分が調べた限りでは即時反映させる方法は2つありました。

**一つ目ですが**
“`ruby:config/environments/developments.rb
config.file_watcher = ActiveSupport::EventedFileUpdateChecker
“`
これを・・・
“`ruby:config/environments/developments.rb
config.file_watcher = ActiveSupport::FileUpdateChecker
“`
とすれば大丈夫です!
# 何をしているのか?
これは
・ファイルの保存イベントを監視するのか
・ファイルを追跡して変更を監視するのか
の違いがあるらしいです!
“`ruby:config/environments/developme

元記事を表示

これでバッチリ!初心者向けdevise導入の基本

本記事では、以下について記載しています。
* deviseの導入手順
* usersテーブルの作成手順
* デフォルト以外のカラムを追加した場合に必要な処理
* deviseを導入すると使える基本のメソッド3選
* deviseの削除方法

# deviseの導入手順
1\. Gemfileの最後の行に以下を追加
“`
gem ‘devise’
“`
2\. Gemをインストール: ターミナルで以下のコマンドを実行
“`
bundle install
“`
3\. ローカルサーバーの再起動: ターミナルで以下のコマンドを実行
“`
rails s
“`
4\. deviseの設定ファイルを作成: ターミナルで以下のコマンドを実行
“`
rails g devise:install
“`
5\. deviseのビューファイルを作成: ターミナルで以下のコマンドを実行
“`
rails g devise:

元記事を表示

Python,Ruby,PHP,Java,JavaScript,Perlのファイル・ディレクトリ操作の比較

Qiita > プログラミング言語の比較

Python,Ruby,PHP,Java,JavaScript,Perlのファイル・ディレクトリ操作の比較

# Python

https://qiita.com/supersaiakujin/items/12451cd2b8315fe7d054

# Ruby

https://qiita.com/prgseek/items/38f74d99b74baa3b42f7

# PHP

https://qiita.com/daichi87gi/items/111cd922991e4a18d1ef

# Java

https://qiita.com/suema0331/items/03330a663773204afc5f

# JavaScript

https://qiita.com/turmericN/items/28e8bc8fca07285ddffc

# Perl

https://perlz

元記事を表示

rails apiでの複数の値をmapで回してcreateアクションでDBへ保存しようとするとAbstractController::DoubleRenderErrorで苦しめられた話

はじめに

reactで配列を使って作成した値を、一気にrails apiに送ってcreateアクションで保存をしたいと考えていました。
ですが、AbstractController::DoubleRenderErrorを解消することに時間がかかったので、備忘録として残そうと思います。
深夜テンションで、雑に文章を書いちゃってる部分もあるかもしれないので、後で元気がある時に確認して必要があれば修正しようと思います。

どのような記述をしてエラーが起きたか

データやモデル名やカラム名は少しいじってますが、下記のような値がrails apiが来ているとします。

~~~
Parameters: {“_json”=>[
{“quiz_name”=>”問1”, “quiz_status”=>”answered”},
{“quiz_name”=>”問2”, “quiz_status”=>”answered”},
{“quiz_name”=>”問3”, “quiz_status”=>”answered”}],
“quiz”=>{}}
~~~

最初は下記のように記述をしていました。

元記事を表示

eachの入れ子についての備忘録

今日も学んだことを忘れない為にメモします

### 入れ子でeach分を使用する際の方法
以下のように、果物の名前と値段が入った配列があり
“`
fruits_price = [[“apple”, [200, 250, 220],[150,200,300]], [“orange”, [100, 120, 80],[400,400]], [“melon”, [1200, 1500],[500,500,500]]]
“`

以下のように果物の名前とそれぞれの合計額が出力されるコードを記述する
“`
appleの合計金額は670円です
orangeの合計金額は300円です
melonの合計金額は2700円です
“`

### 記述内容
“`
fruits_price = [[“apple”, [200, 250, 220],[150,200,300]], [“orange”, [100, 120, 80],[400,400]], [“melon”, [1200, 1500],[500,500,500]]]

fruits_price.each do |fruit|
sum =

元記事を表示

ActiveStorage に保存した画像のサイズを取得する

ActiveStorage をセットアップ後、

“`ruby
class User < ApplicationRecord has_one_attached :avatarend end ``` のように、モデルを定義して、 ```ruby user.avatar.attach(params[:avatar]) ``` のように、ファイルを添付すると、 ```ruby user.avatar.metadata[:width] user.avatar.metadata[:height] ``` で、幅と高さが取れます。 # 必要なもの - [libvips](https://github.com/libvips/libvips) - `ImageMagick` より `libvips` の方が早いそうなので - [ruby-vips](https://github.com/libvips/ruby-vips) - 画像サイズをとるだけだとこれだけで十分 - 画像のリサイズとかする場合には、[image_processing](https://

元記事を表示

RubyKaigi 2022行ってきたYO!

はいどうもー!最近バイク&カメラにドハマリしているYOです。
先日は三重県文化会館で行われたRubyKaigi 2022に参加しました!数年ぶりのリアルイベントなので、ワクワクする気持ちが押さられません!

初日の早朝に最寄り駅について、これが見えた:
![IMG_1447.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59161/f069c160-cb40-c62d-f9be-ee818c021e10.jpeg)
「津(つ)きました!」
この駅名の表示は、遠くから見るときに「?」に見えるようにわざわざ漢字表記を小さく下側に配置したという。遊びココロがあって自分は好きです。

————
駅から無料シャトルバスも出ていて本当に用意周到です!バスに乗って揺られて5分ほど、三重文化会館に到着しました。
入り口の撮影スポットもあったので、記念写真もバッチリ取りました!

![Image from iOS (17).jpg](https://qiita-image-store.s3.ap-nor

元記事を表示

Ubuntu上で、curl使用時やruby/open-uri使用時の”dh key too small”エラー対処法

# 発生した問題
Rubyでopen-uriライブラリを使用してWebスクレイビングをしていたところ、openメソッド実行時に以下のエラーが表示され、サイトにアクセスできなかった。
“`
/home/user/.rbenv/versions/3.0.3/lib/ruby/3.0.0/net/protocol.rb:46:in `connect_nonblock’: SSL_connect returned=1 errno=0 state=error: dh key too small (OpenSSL::SSL::SSLError)
“`

この後、Ubuntu上でcurlコマンド使用時に
“`
$ curl (URL)
[1] 3589
curl: (35) error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small
“`
というエラーが表示され、curlコマンドでもサイトにアクセスできなかった。
私が取った解決法を2パターンまとめる。

また、この問題はUbuntuの設定の問題なので、Ruby以外の言語で

元記事を表示

Ruby/Railsに関してのメモ置き場

Progateを使って一週間弱でWeb開発の基礎を攫っていったが、なかなか理解が難しい、、、
まだまだ理解できていないことも多いが役に立った記事などを感謝も込めてまとめておきたい。

※MVCモデルに関しての記述は特に役に立ったので、これだけでも見て欲しい。
★MVCモデルについて:
https://blank-oldstranger.com/2019/01/11/mvc-model/

◆showアクションについて:
https://www.web-knowledge-info.com/wp/ruby_on_rails11/

◆Rails controllerについて:

Rails controllerを徹底解説!知っておくべき3つの知識も紹介

◆paramsメソッドについて:
https://techacademy.jp/magazine/19878

【Rails入門】params使い方まとめ


https://pikawaka.com/rails/params

◆マイグレーションファイルに

元記事を表示

【Rails】Parameter Objectパターン

## 環境
Rails 6.0.1
Ruby 2.6.3
PostgreSQL 11.16

## Parameter Objectパターン

Laravelだったらフロントから投げられたパラメータはRequest層でバリデーションをかけたりするが、
RailsはドキュメントにRequest層に当たるものが載っていない。
そういうときにParameter Objectパターンを使って実装するのもひとつの手法らしい。

“`app/models/parameters/profile_parameter.rb
module Parameters
class ProfileParameter
attr_reader :name,
:email,
:avatar,
:birthday,
:gender,
:phone_number,
:living_addr

元記事を表示

Python,Ruby,PHP,Java,JavaScript,Perlの文字列連結の比較

Qiita > プログラミング言語の比較

Python,Ruby,PHP,Java,JavaScript,Perlの文字列連結の比較

# Python

https://qiita.com/masa2223/items/cf3c4cc104e90d3c40d3

# Ruby

https://qiita.com/Kta-M/items/c7c2fb0b61b11d3a2c48

# PHP

https://qiita.com/horikeso/items/01463f5e17985428055c

# Java

https://qiita.com/supercell1023koeda/items/a548f2bdd811168e7c44

# JavaScript

https://qiita.com/saka212/items/11ce1f1d6316c1fbf15b

# Perl

https://perlzemi.com/bl

元記事を表示

【Ruby】◯番目から最後までの文字列を取得する

## 環境
Rails 6.0.1
Ruby 2.6.3
PostgreSQL 11.16

## String[]

“`[]“`の中に“`Range“`オブジェクトを指定できる。
“`str[f..-1]“`は「f文字目から文字列の最後まで」を表す慣用句

“`ruby
message = ‘こんにちは、山田さん’

message[2 .. -1]
=> “にちは、山田さん”
“`

ハッシュタグ検索を実装したいときに使えそう
“`ruby
keywords = ‘#今日のコーデ’

if keywords.start_with?(‘#’)
search_keywords = keywords[1..-1]
end
# 検索の処理が続く
“`

https://docs.ruby-lang.org/ja/latest/method/String/i/=5b=5d.html

元記事を表示

[Rails,Ruby]文字列の置換(gsub,sub)

# はじめに
正規表現について学んでいたら、文字を置換する`gsub`メソッドが出てきたので練習も兼ねて遊んでみました。

# gsub
文字列内に指定した文字が複数含まれている場合、その全てを置換します。

使用例の前に突然ですが穴埋め問題です。(同じ数字には同じ単語が入ります)
皆さんは高校野球・山下智茂監督のこの名言をご存知ですか?
“`
心が変われば(1)が変わる
(1)が変われば(2)が変わる
(2)が変われば(3)が変わる
(3)が変われば運命が変わる
“`
答えは1から順に`行動`、`習慣`、`人格`です。

では答えを数字の部分に置換しましょう。
“`ruby
q = “心が変われば(1)が変わる\n
(1)が変われば(2)が変わる\n
(2)が変われば(3)が変わる\n
(3)が変われば運命が変わる”

a = q.gsub(/1/,’行動’).gsub(/2/,’習慣’).gsub(/3/,’人格’)

puts a
“`
すると以下のように出力されます。
“`
心が変われば(行動)が変わる
(行動)が変われば(習慣)が変わる
(習慣)が変われば(人格)が

元記事を表示

Ruby on Rails 7 with Bootstrap on Docker Compose 開発環境で Popovers と Tooltips を有効にする方法

タイトル通りの、ごく単純な内容なのですが、もしかしたら、同じように少し悩んでしまう人もいるのではないかと思ったので、共有しておきます。

ちなみに、そもそも「 Ruby on Rails 7 with Bootstrap on Docker Compose 開発環境 」を構築する方法については、過去の記事をご覧いただければ幸いです。

https://qiita.com/normalsalt/items/8bf6c5010c9e9f127582

さて、やること自体はめちゃくちゃ簡単で、まず、`app/javascript/application.js` を開いて、例えば、以下のように追記してください。

“`diff_javascript:app/javascript/application.js
// Entry point for the build script in your package.json
import “@hotwired/turbo-rails”
import “./controllers”
import * as bootstrap fro

元記事を表示

Rubyで配列や文字列を部分的に反転

以前に next_permutation のアルゴリズムを[勉強していた](/HMMNRST/items/26786552a2660735d34f)際、**配列の一部分だけを逆順に並べ替える操作**が(メソッド一発では)できないことが気になった。 C++ の [`std::reverse`](https://cpprefjp.github.io/reference/algorithm/reverse.html) であれば、列の始端と終端を指定するので部分的にもできそう。

メソッドが無いなら作っておけばいいか、ということで作ってみた。

実装に使うメソッドは範囲指定可能な `#[]` と `#[]=` のみなので、配列だけでなく文字列にも適用できる。複数のクラスを拡張するならモジュール化しておくと良さそう。

“`ruby
# Array と String に共通のメソッドを使って実装
module SequenceExtension
# 破壊的メソッド
# ※ #[] が列を返さないような引数は考慮していない
def reverse_in_range!(*args)

元記事を表示

ActiveRecordでの条件付きのリレーションについて

# 概要
ActiveRecordでは「has_many, has_one, belongs_to」をモデルに定義することでテーブル間同士の関連性を表すことができます。
この関連性ですが、単純なテーブル同士の関係だけではなく、条件を定義することで任意の関連性を表現出来るので、そのことについてまとめます。

# 基本
開発チームとチームメンバーをDBで管理する場合を考えてみます。
開発チームには複数のチームメンバーがいるので、開発チームとチームメンバーの関係は1対nになります。
名前を`teams`, `members`とします。
![名称未設定2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264889/da52d669-a155-4c27-8ee0-04a3be6f7c0f.png)

モデルで定義すると以下のようになります。
“`ruby
class Team < ApplicationRecord has_many :members end class Member < Applica

元記事を表示

さくっとベンチマーク取る時のメモ

# 前提
– メモリ使用量と処理時間
– Ruby 2.7.4

# メモリ使用量
## Gem
– [memprof2](https://github.com/sonots/memprof2)を使う
– Ruby コードのどの行がどのぐらいメモリ(bytes)を消費しているか調べられる
– [かなりリソースを喰うらしい](https://qiita.com/sonots/items/c14b3e3ca8e6f7dfb651#memprof2-gem-dancers:~:text=%E6%B3%A8%E6%84%8F%3A%20%E3%81%8B%E3%81%AA%E3%82%8A%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%92%E5%96%B0%E3%81%86%E3%81%AE%E3%81%A7production%E3%81%A7%E3%81%AF%E3%81%94%E5%88%A9%E7%94%A8%E3%81%84%E3%81%9F%E3%81%A0%E3%81%91%E3%81%BE%E3%81%9B%E3%82%93)

“`r

元記事を表示

include?メソッドとCode Runnerで文字入力した備忘録

今日も学んだことを忘れない為にメモします

### include?メソッドとは?
include?メソッドは、指定した値が配列や文字列内に含まれているかを判定するメソッド。指定した値が含まれている場合はtrueを、含まれていない場合はfalseを返り値として返す。
“`
array = [“foo”, “bar”]
puts array.include?(“bar”)
# => true
puts array.include?(“hoge”)
# => false
“`
配列arrayを作成してinclude?メソッドで引数に含まれているか確認した文字or数字を入れる。
“bar”は含まれているのでtrue
“hoge”は含まれていないのでfalse

### 含みたくない文字の確認にも使える
ピリオドと空白は入力しないで名前を登録して欲しい時、以下のような記述で確認出来る。
“`
def check_name(str)
if str.include?(“.”)
puts “!エラー!記号は登録できません”
elsif str.include?(” “)

元記事を表示

Gem::ConflictErrorについて

### Gem::ConflictErrorについて

**※ 9/16日 追記**
プロを目指す人のためのRuby入門の著者の伊藤 淳一さんから、この記事についてコメントをいただきました。
お忙しい中ご指導をしていただき、大変光栄です。

起動するときに、–no-pluginsオプションを入れると、エラーを回避できることを学びました。
実行したことは下記となります。

①削除したactivesupportをもう一度入れ直す。
“`
$ gem install activesupport -v 6.1.4.1
“`

②–no-pluginsオプションを入れた状態でMinitestを起動してみます。
“`
$ ruby test/gate_test.rb –no-plugins
“`
③無事に起動することができました。

ConflictErrorが起きた時、対象のソフトウェアを削除するのでは、今後そのソフトウェアが必要となったときに問題対処ができなくなってしまいます。今回得た知識を今後の学習に活かしたいと思います。
改めてお礼申し上げます。


**【

元記事を表示

OTHERカテゴリの最新記事