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

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

vscode rails環境構築時のエラー brew doctor

# vscodeにrailsの環境構築の中で出たエラー
homebrewをインストールした後“`brew doctor“`を行った時
“`
Homebrew/homebrew-core (git ******** last commit *******)
*****@mbp ~ % brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don’t worry or file an issue; just ignore this. Thanks!

Warning: Your Command Line Tools are too outdated.
Update them from Software Update in System Preferences or ru

元記事を表示

定数だけを切り出したファイルを作り、複数クラスで使えるようにする

### やりたいこと
Rubyで定義した定数を他のクラスでも使いたいとき、クラス名::定数名のように書くと思う。

ほとんどの場合は問題ないけれど、ときどき下記のような違和感や問題を感じるときがある。

– 関連が強いor内容が似てる複数のクラスで同じ定数を使いたいとき、特定のクラスにだけ定数を記載し、他のクラスではクラス名::定数名と書くことへの違和感
– クラス名が長いときなどに読みづらくなる

なのでより読みやすい、使いやすい形にしたかった。

( “`config/initializers/constants.rb“`で共通の定数を設定する方法もあるが、そこまで全体的に使いたい訳でもない場合を想定 )

### どうするか
定数用のmoduleを作って、定数を使いたいクラスにそのmoduleを読み込んで使う

### やりかた

1. moduleを作成し、定数を記載する
2. 使いたいクラスで読み込む

#### ① moduleを作って定数を書く

HogeConstants.rbを作成し、定数を書く

“`
module HogeConstants

NEKO

元記事を表示

AtCoder ABC の自分の参加状況をスクレイピングで調べてみる

# 概要

わたしは AtCoder の過去問をテキトーに解くだけでやっているうち、どの問題をどれだけ解いたのかわからなくなってしまいました。なので、スクレイピングで過去の ABC の解答状況を表示させるコードを書いてみました。

公式 API があればいちばんよいのでしょうが、どうもないようなので、Ruby を使ってスクレイピングしています。問題があればコメント欄で御指摘願います。

# 結果

“`
ABC245
B – Mex (Elixir (1.10.2))
D – Polynomial division (Elixir (1.10.2))
C – Choose Elements (Elixir (1.10.2))
A – Good morning (Elixir (1.10.2))
D – Polynomial division (Ruby (2.7.

元記事を表示

いいね Ajaxにする

# Ajaxとは?
ページを更新することなくページの内容だけを入れ替えられる。
ajaxの中核を支えているのはJavacriptの技術。

デメリットもあるらしいがそれを差し引いてもメリットがあると今は理解した。
何から手を出していいのかわからない。

## 早速実践
### ボタン
#### my_app/app/views/favorites/_favorite.html.erb
“`html
<% if current_user.like?(micropost) %>
<%= button_to user_favorite_path(current_user, micropost), method: :delete remote: :true do %>
<%= micropost.liked.count %>

<% end %>
<% else %>
<%= button_to user_favorites_path(current_user, micropost), meth

元記事を表示

Crystalにさわり始めてから半年ぐらいの人が感じたRubyとCrystalの違い

こんにちは。

初心者の所感というのは意外と大切で、初心者でなくなってしまうと得られた知識が空気のようになってしまい、忘れられてしまうことがあります。なので、Crystalにさわりはじめてから半年ぐらいの段階で、Rubyとここが違うなと感じたことをメモしておこうと思います。基本的に**ポエム**です。

## 大クラス主義の配列とHashがないけどなんとかなる

Rubyだと、大クラス主義の配列がいろいろな役目を果たしてくれます。配列に異なるクラスのデータを詰め込んで、あとから簡単に追加したり削除することができます。Crystalだとできません。

これは実はそこまで大きな問題ではなくて、記述量は多くなりますが、雑多なクラスを配列やHashに詰め込む変わりに、自作のクラスを定義したり、構造体を使ったり、タプルを使うことでだいたい解決できると感じます。

## evalが使えない

わたし、よくわかってないんですが、直感的にはこれがRubyとCrystalの本質的な違いではないかという予感がしています。CrystalでEvalを実行するためには、Crsytal本体を実行ファイルに含めて、

元記事を表示

【LeetCode】104. Maximum Depth of Binary Treeを解いてみた

## はじめに
コーディングテスト対策としてLeetCodeの104. Maximum Depth of Binary Treeを解いていく。

## 問題文を和訳
– 二分木の根を与えられて、その最大の深さを返します。
– 二分木の最大深度は、ルートノードから最も遠いリーフノードまでの最長パスに沿ったノードの数です。
– Input: root = [3,9,20,null,null,15,7]
– Output: 3

## 回答
“`104_MaximumDepthofBinaryTree.rb
def max_depth(root)
if root
return [max_depth(root.left), max_depth(root.right)].max + 1
else
return 0
end
end
“`

## 最後に
難易度はEasyでした。

元記事を表示

rails seeds.rbファイル とは

# 結論

初期データを作ってくれるファイル。
webアプリのテスト動作などに役に立つらしい。
データを一件入れる場合
“`seeds.rb
モデル名.create!(カラム名:値)
““

* seeds:種

# 具体的な使用例 userモデルオブジェクトの場合

アプリを作り、実際にデータを入れて動かしたい時
データを一件入れる場合
“`seeds.rb
user.create!(name:”倉本”) #!を付けるとエラー画面が表示される。つけないとnilを返すのみ。
““

データを100件入れる場合
“`seeds.rb
100.times do |n|
User.create!(
name:”test#{n+1}”
)
end
“`

# まだテストデータは反映されていない
“`ターミナル.
rails db:seed
“`
これでテストデータが読み込まれます。

# あ、後からテストデータを追加したい時
“`ターミナル.
rails db:migrate:reset
“`
これでテストデータが反映されます。
以上です。

元記事を表示

whereメソッドを使ってDBから取り出すデータを絞り込む

## 実現したかった実装
送られてくるパラメーターの条件を満たしたデータをDBから取り出す実装をしたくて辿り着きました。

## whereメソッドを使用する
モデル名.where(条件)とする事で条件に一致したデータを取り出せます。

## 行った実装
whereメソッドに渡す引数はハッシュの形でいいことに気づき下記のようなクラスメソッドを書きました。

“`ruby
def self.match_recipes(dates)
hash = {}
dates.each{|key, value|
unless value.blank?
hash[key] = value
end
}
Recipe.where(hash)
end
“`
引数に条件の形となるハッシュを渡します。
“`ruby
dates = {“category_id”=>”1”, “genre_id”=>”1”, “type_id”=>””}
recipe = Recipe.match_recipes(dates)
“`
呼び出しのイ

元記事を表示

【LeetCode】3. Longest Substring Without Repeating Charactersを解いてみた

## はじめに
コーディングテスト対策としてLeetCodeの3. Longest Substring Without Repeating Charactersを解いていく。

## 問題文を和訳
– 文字列sが与えられた場合、
– 文字を繰り返さずに最長の部分文字列の長さを見つけます。
– Input: s = “abcabcbb”
– Output: 3
Explanation: The answer is “abc”, with the length of 3.

## 回答
“`3_LongestSubstringWithoutRepeatingCharacters.rb
def length_of_longest_substring(s)
longest = 0
left = 0
right = 0
str = []
while right < s.length if str.include?(s[right]) left = str.index(s[right]) + 1 str = str[left..-1]

元記事を表示

本日の基礎練習問題(22/4/1)

# 問題
前回の問題に機能を追加をしよう。

**今回新たに追加実装してもらう機能は主に以下の2点です。**
・商品ごとの利益・利益率を表示させる
・商品の合計(総売上・総利益・平均利益率)を表示させる

利益の計算方法
利益 (円):販売価格 – 仕入れ値
利益率 (%):利益 ÷ 販売価格 × 100
“`雛形.rb
def register_item(registered_item)
item = {}
puts “商品名を入力してください:”
item[:name] = gets.chomp
puts “販売価格を入力してください:”
item[:selling_price] = gets.to_i
puts “仕入れ値を入力してください:”
item[:cost_price] = gets.to_i
line = “—————————”

puts “商品名 : #{item[:name]}\n#{line}”
puts “販売価格 : #{item[:selling_price]}円\n#{lin

元記事を表示

rails require permit メソッドとは

# 結論
データベースに予期せぬ値が入らないように、ユーザーが入力する値を制限するメソッドの一種。
“`~.rb
params.require(テーブル名).permit(カラム名)
“`

* require:  〜を要求する
* permit : 許可を与える

# 具体例

投稿アプリにて、ユーザーがデータを入力し保存されるまでの順序

ユーザーがフォーム(記入欄)に入力
“`new.html.erb
<%= form_with model:@user, url: user_path, method: :post, local: true do |f| %>

 名前 : <%= f.text_field :name %>

<%= f.submit "送信" %>
# model:@user  モデルオブジェクトにユーザーが入力したデータがないか判断する
# url: user_path  入力した値をどこに渡すか指定
# method: :post  入力した値がデータベースにない場合→createアクション
# 入力した値がデータベースにある場合→upda

元記事を表示

rails paramsとは

# 結論

ユーザーからの情報を受け取るメソッド
“`
params[カラム名]
“`

*parameter: 設定値

# 具体例

ユーザーがある投稿を削除しようと選択した時、以下の手順で処理を行う。

“`index.html.erb
<%= link_to '削除', "/users/#{user.id}", method: :delete %>
# viewに表示されている`削除ボタン`,url
の指定、HTTPメソッドの指定(delet,patch,get
いずれか)
“`
ユーザーが要求したURLが左、それを右へ渡す。

つまり`HTTPメソッドdelete URL`という`要求`が来たから、その要求を処理するために`users_controllerのdestroyアクション`に`要求`を渡す
“`routes.rb
Rails.application.routes.draw do
delete “/user/:id”, to: “user#destroy”
end
# 要求をコントローラーの`destroy`アクションへ渡す
“`
“`users

元記事を表示

Ruby on Rails 事始め

# 本記事の対象者

これまでのRuby関連の知識として、下記のRuby製のOSSを触ったことがある。

* [Redmine](https://qiita.com/EasyCording/items/123be275d5c12e7c49f6)をSynology-NASで立ち上げることができた → [DSMのDockerを使用](https://qiita.com/EasyCording/items/b93c3e4fe5e44a8b17ac)
* GitlabをAWS-ECサーバーに立てることができた → UBUNTU上のDocker-Composeを使用

これからRubyを学ぶ上での、自分の目標設定

* RubyでWEBページが、サクッと作れること
* Redmineのプラグインが作れること
* Reactのような、最新のマテリアルデザインを取り入れたい
* React-Nativeで、スマホアプリも開発したい

# 反省点

* RORを始めるにあたって、これまで書籍等を読んできたが、そのたびに撤退させられている。
* GEMやBundleといった、Rubyの[環境整備](ht

元記事を表示

rails7でバリデーションエラーで画面が遷移しない場合の解決法

# 環境
Ruby 3.0.2
Rails 7.0.2.3

## 結論:Turboの動作をオフにする

form_withに `data: { turbo: false }` を追加する

“`ruby: new.html.haml (≒ new.html.erb)
= form_with model: @event, data: { turbo: false } do |f|
= f.label :name, ‘イベント名’
= f.text_field :name
“`

## 発生したエラー

バリデーションエラーが発生した際に、画面のリロードが発生せず、コンソールに以下のエラーが表示された。

“`ruby
Error: Form responses must redirect to another location at k.requestSucceededWithResponse
“`

## 問題発生時のコード

“`ruby: new.html.haml (≒ new.html.erb)
= form_with model: @event do

元記事を表示

本日の基礎練習問題(22/3/31)

# 問題
以下の仕様を満たすアプリケーションを作成してください。また、必ず注意書きを読んでから作成に取り掛かってください。

**仕様**
プログラムを実行すると、以下の3つの選択肢が表示され、直後にユーザーに対して値の入力を求めること。
[1] : 商品を登録する
[2] : 商品の一覧を確認する
[3] : アプリを終了する
[1]を選択した場合は、商品名、販売価格、仕入れ値を入力させ、保存する。
[2]を選択した場合は、保存された全ての商品情報(商品名・販売価格・仕入れ値)を商品ごとに一覧表示する。
[3]を選択した場合は、アプリケーションを終了する。
アプリケーションを終了するまで、処理を繰り返すこと。

**注意**
雛形を使用すること
引数は雛形で考慮していないため、必要に応じて引数を設定すること

**雛形**
“`.rb
def register_item(registered_item)
# 商品名・販売価格・仕入れ値の入力を促し、入力された値をハッシュオブジェクトで管理する
puts “商品名を入力してください:”
puts “販売価格を入力してくださ

元記事を表示

ActiveStorageで管理するファイルをCloudFront署名付きCookieで限定配信

## この記事について

[以前の投稿](https://qiita.com/zagvym/items/a4f0524c94007317ac95) で、ActiveStorage-S3によるダイレクトアップロードについて調査しました。
その際、併せて「S3にアップロードされた画像ファイルをCDN経由で配信する方法」を調査・検討したので、その記録を記事にしました。

なお、アップロードされたファイルは一般に公開せず配信先を限定する必要があったため、AWS CloudFrontの[署名付きCookie](https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/private-content-signed-cookies.html)を利用して配信するようにしました。
そのシステム構成の概要と、Rails app側への改修例を記載します。

https://qiita.com/zagvym/items/a4f0524c94007317ac95

## 前提条件

まず、ユーザがプロフィール画像を任意にアッ

元記事を表示

絶対はずさないお店を検索できるwebアプリケーションをリリースするまで①

修正前
~~~js