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

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

Rails4.2でArelを用いORクエリを作成

:::note warn
Rails4.2からActiveRecordがSQLのキャッシュのためにSQLのローカル変数 (`$1`など) を使うようになり、ActiveRecordで生成したActiveRecord::RelationをそのままORで繋げられなくなってしまった。
:::

解決時に勉強になったので備忘録として記載

## モデル

– aa_sample
– bb_sample
– cc_sample
– dd_sample

“`rb:関連付け
aa_samples has_many bb_samples
aa_samples has_many cc_samples
aa_samples has_many dd_samples
cc_samples has_many dd_samples
“`

“`rb:aa_sample.rb
# aa_sampleモデル内にscopeを定義
scope :for_test, -> { joins(:bb_sample).where(bb_samples: { test_code: ’01’ }) }
“`

#

元記事を表示

オリジナルアプリをIaC化+データ移行

# はじめに
以前、以下のインフラ構成で[オリジナルアプリをデプロイしました](https://qiita.com/Unimaru/items/66a01ad5dab54e66ff47)が、いくつか改善などをしたく、今回別途インフラ構成をIaCで作成の上、移行をします。(Freenomで別の独自ドメインを取得)

【旧構成】
![スクリーンショット 2022-09-25 10.33.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1067765/438fac02-196b-0b14-a50e-7b05fd973654.png)

【新構成】
![スクリーンショット 2022-09-25 14.14.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1067765/a9e953a9-be23-8d41-7eff-de6b56293c10.png)

### 変更点
* スマホの買い替え/MFA関連により、AWSアカ

元記事を表示

downcaseメソッドとlengthメソッドを使って2つの文字列の末尾が一致しているか判断するプログラム

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

## downcaseメソッド とは
文字列に含まれる大文字を小文字に変換したいときに使用するメソッド。
“`
array = “Hiabc”
puts array.downcase

=> “hiabc”
“`
他にも
・文字列に含まれる小文字を大文字に変換するupcaseメソッド
・文字列に含まれる小文字を大文字に、大文字を小文字に変換するswapcaseメソッド
・先頭の小文字を大文字に,他の文字を小文字にするcapitalizeメソッド
がある

## lengthメソッドとは
「文字列の長さ(文字の数)」と「配列の要素の数」を 調べるためのメソッド。
“`
str = “abcdefg”
puts str.length

=> 7

data = [1,2,3,4,5,6,7,8,9]
puts data.length

=> 9
“`

## プログラム内容
・引数に指定された2つの文字列のうち、どちらかがもう一方の文字列の末尾にある場合は、Trueを出力する
・上記を満たせていない場合は、Falseを出力する
・入力

元記事を表示

Qiita初投稿

未経験30歳からのプログラミング学習の記録をしていきます。
プログラミングスクールにて現在、RubyとRuby on Railsを中心に学習中です。
アウトプット用に記事をこれから書いていきたいと思います。

元記事を表示

Remember_meのチェックをしたときにだけ、指定のURLに遷移しないようにする方法

Railsのログイン機能(Device)で、remember_meのチェックをしたときにだけログイン状態が継続するような仕組みを作るために苦戦したので備忘。

やりたいこと
 remember_meのチェックをしたとき、ログインのURLに遷移しないようにする。(ログインユーザの画面に遷移するようにする)
 チェックをしなければ、ログインのURLに遷移するようにする。

やったこと
 Userモデルにremember_meを有効にするコードを追加、更に、remember関数とそれに付随する関数を追加
“`/rails_projects/dev_obento_01/app/models/user.rb
class User < ActiveRecord::Base attr_accessor :remember_token # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable

元記事を表示

Python,Ruby,PHP,Java,JavaScript,PerlのPDF作成の比較

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

Python,Ruby,PHP,Java,JavaScript,PerlのPDF作成の比較

# Python

https://qiita.com/godan09/items/13866970972bf3a1c243

# Ruby

https://qiita.com/inoue9951/items/4498e5d130702d884352

# PHP

https://qiita.com/one_punch_man/items/bf140d4300195577dd3d

# Java

https://qiita.com/iceblue/items/a059c99ef1c17226a02a

# JavaScript

https://qiita.com/shuhei_sakiyama/items/ef68d49b7199d50a853b

# Perl

https://perlzemi.c

元記事を表示

Ruby問題 配列の並び替え

(1) 配列の並び替え

“`
【Q】 数字の配列を、偶数はそのままの位置で、奇数のみを昇順に並び替えなさい。

例)
[7, 1] => [1, 7]
[5, 8, 6, 3, 4] => [3, 8, 6, 5, 4]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0] => [1, 8, 3, 6, 5, 4, 7, 2, 9, 0]
“`

私の回答

“`ruby
def sort_array(array)
oddsArr = array.select {|n| n.odd? }.sort
array.map {|n| n.even? ? n : oddsArr.shift }
end
“`

1) 配列の中から奇数のみを取り出したいので、selectメソッドを使いました。
sortメソッドで昇降順に並び替えて、新しい配列に入れます。

2) 元の配列を三項演算子を使って、並び替えます。
`n.even?` 偶数であるかどうかを判断
YES => そのまま配列に入れる
NO => 奇数なので、`oddsArr`からshiftメソッド

元記事を表示

asdfでruby2.7.6が見つからない件

# はじめに
コロナにかかってしまった筆者です。高熱は3日続き、微熱が1週間下がらず、半年前から計画していた旅行には行けず、悲しい思いをしました。
気をつけてはいたのですが、皆様もどうぞお身体にはお気をつけくださいませ:pray:

さて、今回は新規で参画するプロジェクトのGitリポジトリをクローンして、bundle installした際に、Gemfileに記載のRubyのバージョンが違うと怒られました。

↓こんな感じですね。
“`console
> bundle install
Your Ruby version is 2.6.6, but your Gemfile specified 2.7.6
“`

asdfでバージョン管理しているので、早速インストールしようとすると、ないと言われてしまいました。

“`console
> asdf install ruby 2.7.6
Version not found
“`

そして、確かにないですねー。。
“`console
> asdf list all ruby | grep 2.7
1.8.6-p287
2.0.0-p2

元記事を表示

【Laravel / Rails】bulk insertについてまとめ

一度に複数のデータを1回のクエリでインサートしたいとき(bulk insert)、insert

## PHP/Laravel

クエリビルダの“`insert“`メソッド

“`php
DB::table(‘users’)->insert([
[‘email’ => ‘picard@example.com’, ‘votes’ => 0],
[‘email’ => ‘janeway@example.com’, ‘votes’ => 0],
]);
“`
https://readouble.com/laravel/9.x/ja/queries.html

先輩エンジニアに聞いたところ、「bulk insertは使うとしたら100万件くらいのデータ量の場合だが極力使わないほうがいい」とのこと。
今回のプロジェクトではデータ量がそこまで大量ではなかったため、bulk insertは結局使わないことにした。
下記記事も参考になった。

https://zenn.dev/naoki_oshiumi/articles/648a00bcd4d209

ただ、調べるとLar

元記事を表示

Docker環境でrails 6以降の構築しました。あ、macはM1チップです。

私はサラリーマンである。
ITエンジニアである。明日も7時前に起きて出社の準備をしないといけない。今深夜1時。

この記事を書き終わる頃には2時とかだろう、早く寝ろ俺。

しかし一個だけ言わせてほしい。

dockerお前の仕事は環境の差異をなくすことちゃうんか!?お前が一番差異に困惑しとるやないかぇぇぇぇぇぇウェえええええええ!!!

# 失礼しました

タイトルの通りrailsをDockerに走らせるだけの簡単なお仕事でミスりまくってものすごい時間を費やしたので書いてます。

# 試したこと

https://zenn.dev/tmasuyama1114/articles/rails-docker-5x-how-to

自分が作ったdeviceでログイン + 文章投稿する という簡単なアプリケーションを
上記リンクを参考にDockercomposeファイルを足してコンテナ化しようとしました。

# そもそも使てるアプリケーションがrails 6~

まず手始めにエラーが出たのは

“`ターミナル
bundler: command not found: rail……..
`

元記事を表示

凝縮度・結合度という尺度から関数のリファクタリングを行う

# 背景

https://gihyo.jp/magazine/wdpress/archive/2022/vol127

☝️読んで感化されました。

https://fortee.jp/object-oriented-conference-2020/proposal/a826b6c6-167c-4c5c-bfc7-52bb8bc22ec1

感化された内容は☝️でもまとめられています。
この記事は上記の内容を読み解いていくだけです。

# はじめに

より良いプロダクトにするために色々な設計論や尺度が存在しています。
知っておいて良いと思うのですが、ひきづられない方がよくて、
現状のプロダクトにとって **何が最善なのかはチームで決めていく** ことが望ましいと思います。
(本の受け売り)

この記事では

– 凝縮度
– 結合度

の観点から関数のリファクタリングについて考えてみたいと思います。

# なぜリファクタリングするのか

https://refactoring.com/

> Since each refactoring is small, it’s less li

元記事を表示

MySQLではinsertで生成されるIDが帰ってこない問題へのアプローチ

注)mysql 5.6のことだけ調べました。他のバージョンのことはよくわからないです。

# この記事でできるようになること
mysqlでinsertしたレコードの自動生成されたIDの取得

# 解決したかった問題
Railsでbulk insertする場合

– 生SQLでinsert文流す
– activerecord-importを使う

を使うのかなと思うのですが、mysqlは生成したレコードのIDがわからない、、、

生成したIDで紐付け処理を行う場合は、再度fetchしてIDを取得する必要がある。
が、取得する場合にkey値がなかったらどうすればいいのか

# 例えばこんなデータ

“`sql
mysql> desc parents;
+————+———————+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+————+—

元記事を表示

Rubyで文字のUnicode(10進数表記)を取得する

## TL;DR
`String.ord` or `String.unpack(“U*”)`を使う
“`ruby
‘あ’.ord # 12354
‘あ’.unpack(“U*”) # [12354]
“`
https://docs.ruby-lang.org/ja/latest/method/String/i/ord.html

https://docs.ruby-lang.org/ja/latest/method/String/i/unpack.html

## ordとunpackの違い
返り値の型が違うので実装上は注意が必要です。
`ord`は最初の文字のUnicodeをIntで返しますが、`unpack`は1文字ずつのUnicodeをArrayで返します。
“`ruby
# 対象が1文字
‘あ’.ord # 12345
‘あ’.unpack(“U*”) # [12354]

# 対象が複数文字
‘あいうえお’.ord # 12354
‘あいうえお’.unpack(“U*”) # [1

元記事を表示

authenticate_user!メソッド

# authenticate_user!メソッドとは
ログイン状態によって表示するページを切り替えるdeviseのメソッドで

ユーザーがログインしていなければ、そのユーザーをログイン画面に遷移させる事が出来ます
以下のようにcontroller内にbefore_actionを記述する事で、アクションを実行する前にログインしていなければログイン画面に遷移させられます。

“`:ruby
before_action :authenticate_user!
“`

##### indexアクションではログインをしていなくても閲覧できるようにしたい場合は以下のように記述する

“`:ruby indexはログインせずに閲覧できる
before_action :authenticate_user!, except: :index
“`

##### このように複数のアクションにも適用する事も出来ます

“`:ruby indexとshowをログインせずに閲覧できる
before_action :authenticate_user!, except: [:index, :show]
`

元記事を表示

(未解決) Mac + Ruby + Selenium + Chrome でドラッグ&ドロップが出来ない。カーソル位置でドロップされてしまう。

# 感想

drag_and_drop ではなく他のメソッドを使ってみても無理で、Seleniumのカーソル移動的な挙動(?)が壊れているかもしれない気がした。

Firefoxではまったくドラッグもドロップも出来なかった。

# Ruby

“`rb
require ‘selenium-webdriver’

driver = Selenium::WebDriver.for :chrome
driver.navigate.to “file:///Users/yumainaura/projects/YumaInaura/ruby/drag-and-drop.html”

source = driver.find_element(:id, ‘p1’)
target = driver.find_element(:id, ‘dd1’)

driver.action.drag_and_drop(source, target).perform

sleep 3
“`

# HTML

“`html