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

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

【Ruby】ネストしたHashをselectメソッドを使って検索する方法

## 今回行いたいこと
“`
@drinks{:cola=>{:price=>120, :stock=>5},:redbull=>{:price=>200, :stock=>5},:water=>{:price=>100, :stock=>5}}
@slot_money = gets.to_i
“`
– 上記のHashの:priceの値と@slot_moneyを比較し、購入可能なドリンクのみを入れたリストを作りたい。また、在庫がある商品のみをリストに表示する。

## 実装条件をもとに考えたこと
– リストを作りたいので、リストを返すメソッドを使用する。
– 比較しなければいけないので、Hashの中身を検索できるメソッドを使用する必要がありそう。
=>find, find_all, selectなど…?

## とりあえず、selectが条件に合いそうなので実験してみる。
selectメソッドについて
> select -> Enumerator[permalink][rdoc][edit]
select {|key, value| … } -> Hash
filter ->

元記事を表示

Python,Ruby,PHP,Java,JavaScript,Perlのソケット通信の比較

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

Python,Ruby,PHP,Java,JavaScript,Perlのソケット通信の比較

# Python

https://qiita.com/nadechin/items/28fc8970d93dbf16e81b

# Ruby

https://qiita.com/kudojp/items/d416d4c97f9d0512c088

# PHP

https://qiita.com/shiba0410/items/3102592350039bc1a7b9

# Java

https://qiita.com/Hyman1993/items/a3aaabbb2e83580d68d2

# JavaScript

https://qiita.com/take4eng/items/d0b009c48ee8c3fe420a

# Perl

https://perlzemi.com/blog/200

元記事を表示

【解決済み】RailsのHostAuthorizationによってELBのヘルスチェックがhealthyにならない

ポートフォリオをデプロイする際に発生した問題について、備忘録として投稿します。

## 発生した問題
Rails6 + AWSで下記の構成のようなアプリを開発していました。

![インフラ構成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2263192/32b8dab2-46ef-7f69-a8c9-85d4cd39d76d.png)

Railsの`HostAuthorization`を利用し、`/api/health_check`というパスでALBからのヘルスチェックを行おうとしました。
しかし、Railsが`403エラー`を返し、ヘルスチェックが失敗してしまいました。

## 原因
Railsの設定は下記のようになっていました。

“`environments/production.rb
onfig.hosts << 'base_domain.com' ``` 原因は、 **「ヘルスチェック時のホスト名が`base_domain.com`でないからエラーになっていた」** というものです

元記事を表示

【Ruby on Rails】CanCanCan の authorize_resource はレコードの権限まではチェックしてくれない

# CanCanCan
Rails でいい感じにアクセス権を確認したり、作成・更新できるかを確認したり、そんなことができる gem です。

https://github.com/CanCanCommunity/cancancan

以下のような記事が参考になると思います。

https://qiita.com/umanoda/items/679419ce30d1996628ed#model%E3%81%AE%E3%81%AA%E3%81%84%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%B8%E3%81%AE%E6%A8%A9%E9%99%90%E8%A8%AD%E5%AE%9A

この gem を導入すると、controller で権限認証が楽にできます。

# authorize!
まず、本題の`authorize_resource`の前に、元となる`authorize!`を見てみます。
“`ruby
#books_controller.rb
def show
@book = Bo

元記事を表示

【Rails】M1 Macでシステムスペックの実行時にNet::HTTPServerException: 404 “Not Found”というエラーが出た場合の対処法

## 発生した問題

M1 Macでシステムスペックを実行したら突然以下のようなエラーが発生し、テストが実行できなくなった。

“`
Webdrivers::NetworkError:
Net::HTTPServerException: 404 “Not Found” with https://chromedriver.storage.googleapis.com/106.0.5249.61/chromedriver_mac64_m1.zip
“`

## 原因
Chromedriverの命名規則が変わった影響らしい。

https://github.com/titusfortner/webdrivers/issues/237

## 解決方法
webdrivers gemを5.2.0以上にアップデートする。

“`
$ bundle update webdrivers

$ bundle show webdrivers
/Users/jnito/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/webdrivers-5.2.0
`

元記事を表示

ログインの有無で処理を変える方法

# はじめに
user_signed_in?メソッドの利用方法を忘れないために記録する

## user_signed_in?メソッドとは
Gemのdeviseを導入しているため、使用できるメソッド。
ログインしているかどうかの判定を行う。

#記載方法
<% if user_signed_in? %>

<%= link_to "ログアウト", destroy_user_session_path, method: :delete %>
<%= link_to "投稿する", new_tweet_path, class: "post" %>

<% else %>

<%= link_to "ログイン", new_user_session_path, class: "post" %>
<%= link_to "新規登録", new_u

元記事を表示

【Ruby on Rails】Model の scope で find_by するのはNG

# scope の罠
先日以下のような scope を見ました。
“`user.rb
class User < ActiveRecord::Base scope :foo, -> (bar) do
return if bar.nil?
find_by(bar: bar)
end
end
“`

もちろん使い方しだいではありますが、この動き、ちょっと想定外だったりするので注意です。

`bar` が `nil` で `return` される場合 (`nil` が返る)、
`find_by` で見つからなくて `nil` になる場合、

このとき、scope の戻りは `nil` ではありません。

`User.foo(nil)` は nil ではありません。

`User.all` が返ります。

(正確には default scope が返る)

## なぜ `nil` が返らないのか

どうやら `scope` は `ActiveRecord::Relation` を返すものだと決まっているよう。
なので`nil`が返るときは default scope

元記事を表示

[Rails]実務を通しての実装ノウハウ集

# 1. チェック対象値が指定の範囲に含まれるか(数値・時間)

“`
(【開始値】..【終了値】).cover?(【チェック対象値】)
“`

補足:
– 【開始値】 <= 【チェック対象の値】 <= 【終了値】になっているかをチェックする - **数値的な範囲、日時的な範囲のチェック** に使える - **日時のチェックに使う場合** - 【開始値】、【終了値】のいずれかがnilである場合は、**十分に過去の日時 or 未来の日時** として扱われる - 類似の実装として``【チェック対象の値】.between?(【開始値】, 【終了値】)``ということもできるが、こちらは **【開始値】、【終了値】どちらかがnilである場合エラーとなってしまう** # 2. 配列要素の重複チェック **2.1. どの要素が重複しているかわからなくてもいい場合** ``` # true:重複あり, false:重複なし 【配列】.size != 【配列】.uniq.size ``` **2.2. どの要素が重複しているか知りたい場合** ``` # dup_valuesは

元記事を表示

複数タグの編集機能を実装[Rails]

# 概要
先日、こちらの記事を参考にさせていただき、投稿に紐づいた複数タグ機能を実装しました。

https://qiita.com/ryutaro9595/items/042a1ec713c8c1f2c1d6

そこで今回、投稿編集機能を実装していたとき、タグも編集したいと思い、タグ編集機能を実装しましたので共有させていただきます。
私の実装では、Post(投稿)に対し、Genre(タグ機能)を実装しています。
以下、タグのことをジャンル、もしくはGenreと述べさせていただきます。
スクリーンショット 2022-10-12 13 40 17

# 開発環境
– OS:Amazon Linux2
– Rails 6.1.6.1

# 実装
## アソシエーション
私が行った実装では、タグのことをGenreとして実装していて

元記事を表示

【Ruby】nil or 未定義の場合の代入演算子

メモとして残します。

代入演算子というのかは定かではありませんが、左辺がnil、または存在しない場合のみ、右辺を左辺に代入するという演算子です。

# ■やり方
`hoge = hoge || ‘nilの場合代入される’`
要するに上記を省略して書くと下記のようになる。

“`rb
hoge = nil
hoge ||= ‘代入されるよ’
#>> hoge = ‘代入されるよ’
“`

“`rb
hoge = ”
hoge ||= ‘代入されないよ’
#>> hoge = ”
“`

以上

元記事を表示

エラー文(uninitialized constant)の内容

# はじめに
エラー文でよく見る「uninitialized constant」の意味が翻訳結果とはほど遠いので、記録に残す。

## uninitialized constantについて
「uninitialized constant」のエラー文は、
直訳すると「初期化されていない定数のエラー」という意味だが、
Rubyでは「ファイル名やクラス名が正しくない場合」に表示されるエラー。

元記事を表示

nil にto_i to_s

nilに対して、to_sやto_iをすることができました。

“`
n = nil
p n.to_i
p n.to_s

# 0
# “”
“`

元記事を表示

【初心者向け】Railsに出てくるsessionとは??

## 書いた理由
Railsの学習をしていて、sessionの使い方が分からなかったため記事にまとめてみました。
プログラミング初学者のため、間違えていることがあるかもしれません。ご容赦ください?

## 環境
mac m1
Ruby 3.0.1
Ruby on Rails 6.0.3

## sessionとは?
sessionとは主にログイン機能に使用されるもので、ログイン状態を維持させるものです。つまり、ステートフルな通信を実現させるための仕組みとなります。

## sessionを使ってみよう!
1. sessionに値を保存する
セッションはハッシュと同じようにキーとバリューの組み合わせで値を保存します。

“`
session[:user_id] = user.id
“`

1. sessionの値を削除
デリートメソッドの引数にキーを与えて、該当する要素を削除します。

“`
session.delete(:user_id)
“`
結果的にsessionの中身はnilとなります。

## 注意!
sessionは基本

元記事を表示

配列の値 入れ替える

配列の値を入れ替える式が理解できませんでした。
“`
numbers[indexMin], numbers[i] = numbers[i], numbers[indexMin]
“`
この式はnumbers[indexMin]とnumbers[i]を入れ替えています。
値を入れ替える方法は
“`
x = numbers[indexMin]
numbers[indexMin] = numbers[i]
numbers[i] = x
“`
上記のような形しか思いつきませんでしたが、
このような方法があると初めて知りました。

元記事を表示

RubyでUMAPをできるgemを作った話


[![Gem Version](https://badge.fury.io/rb/umappp.svg)](https://badge.fury.io/rb/umappp)

## はじめに

Uniform manifold approximation and projection ([UMAP](https://github.com/lmcinnes/umap)) はt-SNEとならんでよく使われる次元圧縮によ

元記事を表示

created_atとupdated_atの表示を変更する方法

# created_atとupdated_atを日本時間へ変更する方法

config/application.rbに以下のコードを記述する

“`config/application.rb
config.time_zone = ‘Tokyo’
“`

“`config/application.rb
require_relative ‘boot’

require ‘rails/all’

# Require the gems listed in Gemfile, including any gems
# you’ve limited to :test, :development, or :production.
Bundler.require(*Rails.groups)

module App名
class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. config.load_defa

元記事を表示

Rubyで多次元ベクトルの内積を並列計算

例として12次元ベクトルを前半、後半に分けて、前半の内積、後半の内積を2つのTheadを使って求める。2つの内積の和が求めたい内積の値となる。
前半の内積、後半の内積を計算するProc(クロージャー)を作ってQueueに放り込むコードは次の通り。
前半の内積、後半の内積を変数sumに蓄積したいが、この計算はThread安全に行いたいのでクリティカルセクションとしたい。
クリティカルセクションにしたいクロージャーは、Mutexオブジェクトのsynchromizeメソッドの引数に与えれば作ることができる。

“`ruby
# 内積の計算を2Threadで実行。
ary0 = [0.4, 0.2, 0.3, 0.5, 0.2, 0.4, 0.5, 0.1, 0.2, 0.4, 0.5, 0.9]
ary1 = [0.1, 0.2, 0.2, 0.2, 0.3, 0.4, 0.4, 0.4, 0.5, 0.5, 0.5, 0.9]
sum = 0
lock = Mutex.new
q = Queue.new
[{:from => 0, :to => ary0.size/2},
{:from

元記事を表示

RSpecを読む、駆け出しエンジニア。

## 駆け出し歴、1年5ヶ月
Railsで開発を行っている駆け出しエンジニアです。
RSpecでのテストを書いているのですが、自身がテストを書くときに意識している **文脈** について
共有したいと思い記事にしました。

駆け出したばかりの頃の自分へ向けた内容になっています :walking_tone1:

## 例とするテストコード
下記のようなテストコードがありました。
今日はこれを日本語で読んで行きたいと思います。

“`rb
describe “drink?” do
subject { UniversityStudent.new(age: age).drink? }

context “19歳の場合” do
let(:age) { 19 }

it “お酒を飲んではいけないこと” do
expect(subject).to be_falsey
end
end

context “20歳の場合” do
let(:age) { 20 }

it “お酒を飲んでもいいこと” do
expect(sub

元記事を表示

VBA で Ruby を動かす

# はじめに
前回の記事で、~~会社支給のパソコンに~~`Ruby`をインストールすることに成功しました。

https://qiita.com/superrino130/items/e2d7b039c8d91a373770

VBA最強ではありますが、速度やネットワーク関連でRubyを呼び出したいところです。

ここでは、次の記事を参照しています。

https://qiita.com/O_LUPAN/items/1ceb5c950ff40f3558ab
# VBAソース
“`VB:VBA
Option Explicit

Public Sub puts_Ruby01()
Dim suji1 As String
Dim suji2 As String
Dim rb_file As String

suji1 = “3”
suji2 = “5”

Dim WSH
Dim wExec
Dim cmd_str As String

Set WSH = CreateObject(“WScript.She

元記事を表示

【Ruby on Rails】booleanで実装するときとenumを使うときの違いは?(データ型一覧有り)

# はじめに
Ruby on Railsでポートフォリオ作成にあたりテーブル定義書を作成したが、booleanで実装するときとenumを使うときの違いがわからなかったため調べた結果を記録に残しておく。
また、今後のためにデータ型はどんなものがあるのか一覧にしておくことで、調べる時間の短縮を図る。
(実際に何度も実装する内によく使うデータ型は自然と覚えていくと思うが、現時点ではそのレベル感には到達していないため、記録に残しておきます。)

# データ型一覧

– string : 文字列(1 〜 255文字)
– text : 長い文字列(1 〜 4,294,967,296文字)
– integer : 整数型(4バイト)
– bigint : 整数型(8バイト)
– float : 数値(浮動小数点数)
– decimal : 固定長整数型(精度の高い小数)
– datetime : 日付と時刻(1000-01-01 00:00:00.000000 〜 9999-12-31 23:59:59.999999)
– time : 時刻 (-838:59:59 〜 838:59:59)

元記事を表示

OTHERカテゴリの最新記事