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

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

クラス

デイトラ学習記録

“`Ruby
class Todo
VERSION = 1

attr_accessor :title, :time, :tasks

def initialize(title, time)
@title = title
@time = time
@tasks = []
end

def self.create(title, time, task)
todo_work = self.new(title, time)
todo_work.add_tasks(task)
return todo_work
end

def add_tasks(task)
self.tasks.push(task)
end

def describe
puts all_tasks
end

private
def all_tasks
“#{self.time}\n#{self.tasks.join(“・”)}”
end
end

class Kanban < T

元記事を表示

Rails 6.1.5で uninitialized constant Mail::TestMailer というエラーが出る場合の対処法

Railsでメールを送信しようとすると以下のようなエラーが出る場合があります。

“`
NameError (uninitialized constant Mail::TestMailer

delegate :deliveries, :deliveries=, to: Mail::TestMailer
^^^^^^^^^^^^):

app/mailers/application_mailer.rb:1:in `


app/mailers/user_mailer.rb:1:in `

app/controllers/home_controller.rb:3:in `index’
“`

![Screen Shot 2022-03-30 at 7.41.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7465/697252ea-a3de-6e4c-c039-

元記事を表示

【Rails】フォーム送信した値の前後空白改行を削除する(全角スペース削除対応)

Railsで`form_with`のテキストエリアに入力された値の前後の改行や空白を削除したい。

## 実装

特に難しい内容でもないので実コードを書きます。

“`ruby:post.rb
class Post < ApplicationRecord validates :content, presence: true before_save :trim_content private def trim_content content.strip! end end ``` `strip!`メソッドで**前後の改行や空白**を削除できます。 `form_with`から入力した値を加工するチャンスはその他にも`JavaScript`や`Controller`内などありますが、`Model`内でやるのが一番管理しやすいかと思います。 ### 全角スペースの削除対応 ちなみに、`strip`や`strip!`メソッドですが、全角スペースは対応していません。 そのため、下記のような文字列の場合は不完全な結果になってしまいます。 ```ruby # 先

元記事を表示

【Ruby】条件演算子を使って指定日時になると画像が切り替わるようにする

非エンジニアがどうしても未知のRubyをいじらなくてはならず、調べながら格闘した記録です……

### 条件演算子とは

`条件式 ? 真の時の値 : 偽の時の値`

>条件演算子(三項演算子とも呼ばれます)は条件式の結果によって異なる値を返す演算子です。
> https://www.javadrive.jp/ruby/if/index10.html

今回はこれを使って画像の表示を切り替えていきたいと思います。

### やりたいこと
**2022/05/01 00:00:00以降に”new_photo.jpg”を表示させたい。それまでは”old_photo.jpg”を表示させておきたい。**

“`index.html.erb
rails でアプリを立ち上げ時に、データベースを指定する方法

# 結論

“`
% rails new -d データベース名
“`
これでデータベースを指定することができます。

ちなみに,

## データベースを作成する方法
“`
% rails db:create
“`
これで指定したデータベースを作成することができました。

これはまだ、データベースというデータを入れる箱を作ったに過ぎません。

例えるなら

弁当作った←弁当箱を作った段階です。

## 中身のデータを作成する方法

“`
% rails g model モデル名(単数)  カラム名:データ型(カラム名:データ型は複数指定可能)
“`
これで例えるなら弁当箱のどこに何を入れるのかなんとなく決めた状態です。

実は、この時に`maigrateファイル`というファイルが作成されてます。`migrateファイル`とはデータベースの中身の表(テーブル)の構造を指定するファイルです。例えるなら弁当箱の仕切り(アルミ箔やバランなど)ですかね、、、

ちなみに
“`
g = generate : 生成する
model : 模型
column : データ表の縦列
データ型 :

元記事を表示

【Rails7 × Next.js】Dockerで環境構築してみる。

# 概要
Rails7がリリースされたから環境構築の手順があれば後から楽だなと思ったから、Next.jsをフロントにする前提で構築してみました。

# 環境
Ruby: 3.1.1
Rails: 7.0.2.3
Postgres: 14.2
Docker: 20.10.13
docker-compose: 2.3.3

# 手順
## 1.プロジェクト立ち上げ前にファイルを作成する
以下の構造でファイルを作成する。

“`ruby
.
├── frontend
   ├── Dockerfile
├── backend
   ├── Dockerfile
   ├── Gemfile
   ├── Gemfile.lock # 空でOK
├── docker-compose.yml
“`

## 2.docker-compose.ymlを記述する

“`docker-compose.yml
version: ‘3.7’

services:
postgres:
image: postgres:11.6-alpine
port

元記事を表示

【LeetCode】94. Binary Tree Inorder Traversalを解いてみた

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

## 問題文を和訳
– 二分木のルートが与えられた場合、
– そのノードの中間順探査(inorder traversal)を返します。
– Input: root = [1,null,2,3]
– Output: [1,3,2]
– 木構造にある各ノードを1度だけ訪問することを探索(走査)と呼びます。
– 全探索の仕方をおおまかに分けると、
– ・深さ優先探索(DFS)
– ・幅優先探索(BFS)
– の2つとなります。
– 深さ優先探索はさらに
– ・行きがけ順(先行順 / 前順 / preorder)
– ・通りがけ順(中間順 / 間順 / inorder)
– ・帰りがけ順(後行順 / 後順 / postorder)
– の3つに分けることができます

## 回答
“`94_BinaryTreeInorderTraversal.rb
def inorder_traversal(root)
result = []
if root

元記事を表示

【LeetCode】88. Merge Sorted Arrayを解いてみた

## はじめに
コーディングテスト対策としてLeetCodeの88. Merge Sorted Arrayを解いていく。

## 問題文を和訳
– 降順ではない順序でソートされた2つの整数配列nums1とnums2と、
– それぞれnums1とnums2の要素数を表す2つの整数mとnが与えられます。
– nums1とnums2を、降順ではない順序で並べ替えられた単一の配列にマージします。
– 最終的にソートされた配列は、関数によって返されるのではなく、配列nums1内に格納されます。
– これに対応するために、nums1の長さは m + n です。
– ここで、最初のm要素はマージする必要のある要素を示し、
– 最後のn要素は0に設定されているため、無視する必要があります。
– nums2の長さはnです。
– Input: nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
– Output: [1,2,2,3,5,6]
– Explanation: The arrays we are merging are [1,2,3] a

元記事を表示

【Ruby】OpenStructを使ってオンデマンドにアクセッサーを生やす方法

# はじめに

Ruby標準のOpenStructクラスを使うことで手軽にデータ構造を扱うことができます。
この記事ではOpenStructを使ったサンプルを紹介したいと思います。

# これらに興味がある人向けの記事です

– OpenStructを使ってみたい
– データ構造はハッシュよりクラスにしたい
– クラスを宣言的に用意するのは面倒

# こんな人には不向きです

– ハッシュデータ構造をそのまま扱うのに何の苦も感じない
– クラスは宣言的に用意したい

# 目次

– [OpenStructとは](#openstructとは)
– [サンプルデータ構造](#サンプルデータ構造)
– [OpenStructを使うサンプル](#openstructを使うサンプル)
– [最後に](#最後に)

# OpenStructとは

Ruby標準のライブラリです。リファレンスによると

“`
要素を動的に追加・削除できる手軽な構造体を提供するクラスです。

OpenStruct のインスタンスに対して未定義なメソッド x= を呼ぶと、
OpenStruct クラスの BasicO

元記事を表示

細かいつまずいたことをメモしておく(3月編)

# はじめに

今月はkubernetesをはじめたり、CLFの勉強をはじめたりで個人開発はあまり行わなかったので少なめです。

# 問題

## 1. RailsでMissing host to link to!

[RailsでMissing host to link to!が出たときに。model内でURL組み立てる場合の設定](https://qiita.com/daik/items/41a9bc8dec5ccec37f40)を参考にして設定

“`rb:/config/environments/development.rb
host = ‘localhost:3000’
Rails.application.routes.default_url_options[:host] = host
“`

## 2. Vue Vuetify: Invalid prop: custom validator check failed for prop “value”

[Vue Vuetify: Invalid prop: custom validator check faile

元記事を表示

コメント機能の実装

# コメント機能の実装
## 概要
– ポートフォリオとして作成する学習マッチングアプリの中で、コミュニケーションツールを実装したい。
– twitterをイメージしたツールにしたい。
– ユーザ間のコミュニケーションを想定する。
## アソシエーション
![9cf19332afde24ac92928cee7c83ac90.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1923339/e10317da-4c74-cea8-4cd6-501d95ebb0a1.png)
## テーブル定義
### Commentsテーブル
[![Image from Gyazo](https://i.gyazo.com/546427b61330905b11df1bdc51113a00.png)](https://gyazo.com/546427b61330905b11df1bdc51113a00)
### ReplyRelationshipsテーブル
[![Image from Gyazo](https://i.gyazo

元記事を表示

Bullet TrainでRailsの開発が何倍も速くなりました!

# Bullet Trainとは
[Bullet Train](https://bullettrain.co/)とはRailsをベースにして、多くのサービスに普段ついているユーザー登録・認証やAPI関係の機能など、ビューのテンプレートなどを、新しいアプリを作った時点で全部提供してくれる、ウェブサイトを作るためのSaaSフレームワークです。

開発自体がRailsとほとんど変わりません。普通の線路(Rails)より新幹線(Bullet Train)のごとく、サイトの開発をとても速くしてくれるフレームワークですので、皆さんにぜひ一度でも使ってみていただきたいと思います。

# 「メニューはお任せ」
Railsを普段やっている人であれば「[メニューはお任せ](https://rubyonrails.org/doctrine#omakase)」という概要について聞いたことがあるでしょう。
> How do you know what to order in a restaurant when you don’t know what’s good? Well, if you let the ch

元記事を表示

【個人開発】「タバコ」辞めたくないけど減らしたい人へ向けた育成型喫煙管理アプリ【NICOTTI】(ニコッチ)を作成しました。

![nicotti_wantedly.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2496320/5e7b15f1-eed4-0712-092d-cd3b9deabbc4.jpeg)

## サービス紹介

「禁煙」ではなく「減煙」を目的とした、喫煙管理アプリです。
NICOTTI(ニコッチ)を育成しながら喫煙を楽しく管理できます。

https://www.nicotti.jp/

https://github.com/asakanobuaki/nicotti/

## アプリを作ったきっかけ
私には喘息持ちでヘビースモーカーな兄がいます。
喫煙を控えるように伝えても「禁煙したら逆にストレスで死ぬ」といつも言われるので、調べてみると多くの人が同じような経験あるとのこと。

喫煙をする人に多いのが「なんとなくの喫煙」で余分にタバコを吸ってしまうことです。(自分がそう)「禁煙」と聞けば大変そうですが、「余分な喫煙」をなくすくらいならできそうな気がします。
せめて、私の兄に喫煙本数を減らさせることはで

元記事を表示

検索機能の実装

# 検索機能の実装
## 概要
– 学習マッチングサイトを作成する。ユーザーが講座を作成して、ユーザー間で売買を行う。バイヤー側が、講座を様々な条件で検索できるようにしたい。
– 具体的には、カテゴリー、受講形態(オンラインかオフラインか)、アクセス先(住所かURLか)、価格(上限)、タグで検索できるようにしたい。
– カテゴリー、受講形態、アクセス先、価格はand検索、タグはor検索にしたい。
## アソシエーション
![0b5fbcf246ecc3190132d23b59ea7a28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1923339/de465090-247d-6bcc-3039-a723e0f98ce3.png)
## テーブル定義
– Lessonsテーブル
[![Image from Gyazo](https://i.gyazo.com/b80f2208176be59fa64d498ab6db603f.png)](https://gyazo.com/b80f2208176be59f

元記事を表示

【Ruby】Googleカレンダーに服薬記録をつけるAlexaスキル作ってみた

# 背景

最近買ったEcho Show 5で、頓服薬の服薬記録をつけられたら便利だなと思ったことがきっかけです。

– 既存の服薬記録系Alexaスキルだと、Echo Showやスマホの画面で記録を確認することが難しそう
– スマホからの記録の表示や変更・削除はできるだけ楽に実現したい(できれば開発したくない)ので、記録をGoogleカレンダーに予定として入れたい
– 利用者(家族)が使いやすいよう、できるだけシンプルな操作で記録をつけたい
– Alexaのデフォルトカレンダーとして設定しているGoogleカレンダーと、服薬記録用のGoogleカレンダーを別IDに分けたい

という理由で、自分でスキルを作ることにしました。

# 概要
スキルを呼び出すと、話しかけた内容によって下記3つの挙動をします。
1. 「アレクサ、[スキル名]を開いて、記録をつけて」
→Googleカレンダー上に、現在時刻〜5分後の予定(=服薬記録)を作る
2. 「アレクサ、[スキル名]を開いて、記録を見せて」
→画面に当日の服薬記録を表示する
3. 「アレクサ、[スキル名]を開いて」
→利用方法の案内を

元記事を表示

Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂3版 のコマンドまとめ

# 目的
Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂3版で学習したコマンドを随時まとめていきます。

最終的には、Ruby on Rails を AWSで動かします。

## コマンドまとめ

### ネットワーク関連のコマンド
「ping」「traceroute」「telnet」「nslookup」「dig」

## 個人的に使用したツール
* AWS構成図作成
https://www.diagrams.net/

元記事を表示

タグ付け機能

# タグ付け機能の実装
## 概要
– ポートフォリオ作成として、学習マッチングサイトを作成。サイト内で講座を作る際にタグ付けを実装したい。
– ユーザーが自由にタグ付けできるようにしたい。
## 環境
– Rails 5.2.6
– ruby 2.6.3
## アソシエーション
![6ab4f133dfb54bd244def97a350b6d3e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1923339/09bc2f44-8b8e-c54d-a0e1-acdbf83bc5d8.png)
講座(Lessonsテーブル)は複数のタグを持ち、タグ(Tagsテーブル)は複数の講座を持つため、講座:タグ=多:多となるため、中間テーブルとして、TagListsテーブルを作成した。
## テーブル定義
[![Image from Gyazo](https://i.gyazo.com/f0670c7ffdc63ac92e8c8b122e24a1a0.png)](https://gyazo.com/f0670c7f

元記事を表示

Railsでアプリ作成時に、使用可能なバージョンを確認する方法

# 結論

ターミナルで以下を入力

“`
% gem list rails
“`
これで使用可能なバージョンが表示されます

“`
*** LOCAL GEMS ***

rails (5.0.1, 4.2.6, 4.2.5, 4.1.6)
“`

## ちなみに
バージョンを指定してアプリを立ち上げる場合
“`
rails _5.0.1._ new アプリ名
“`
これで指定のバージョンでアプリを作成できます。

以上です

元記事を表示

【LeetCode】83. Remove Duplicates from Sorted Listを解いてみた

## はじめに
コーディングテスト対策としてLeetCodeの83. Remove Duplicates from Sorted Listを解いていく。

## 問題文を和訳
– ソートされた連結リストの先頭を指定して、
– 各要素が1回だけ表示されるように、すべての重複を削除します。
– ソートされた連結リストも返します。
– Input: head = [1,1,2,3,3]
– Output: [1,2,3]

## 回答
“`83._RemoveDuplicatesfromSortedList.rb
def delete_duplicates(head)
current = head
if head == nil
return head
end
while current.next != nil
if current.val == current.next.val
current.next = current.next.next
else
current = current.next
end
end

元記事を表示

【LeetCode】70. Climbing Stairsを解いてみた

## はじめに
コーディングテスト対策としてLeetCodeの70. Climbing Stairsを解いていく。

## 問題文を和訳
– あなたは階段を上っています。
– 頂上に到達するにはn段あります。
– 毎回、1段または2段登ることができます。
– いくつの方法で頂上に登ることができますか?
– Input: n = 3
– Output: 3
– Explanation: There are three ways to climb to the top.
1. 1 step + 1 step + 1 step
2. 1 step + 2 steps
3. 2 steps + 1 step

## 回答
“`70. Climbing Stairs.rb
def climb_stairs(n)
num1 = 0
num2 = 1
for i in 0…n do
num3 = num1 + num2
num1 = num2
num2 = num3

元記事を表示

OTHERカテゴリの最新記事