- 1. 【Rails】checkboxのデザインを変更
- 2. Rubyのクラス(String・Integer・Array・Hash)・mapメソッド
- 3. Herokuのコマンド一覧
- 4. 【rails】join先テーブルの指定カラムの合計値算出を370倍高速化した話
- 5. 【LeetCode】2. Add Two Numbersを解いてみた
- 6. 【LeetCode】100. Same Treeを解いてみた
- 7. Ruby を Julia にトランスパイル する Gem
- 8. 【Rails】bcryptを使ったパスワードのハッシュ化と認証
- 9. Rubyのクラスのコード
- 10. Rails 6.1.5で uninitialized constant Mail::TestMailer というエラーが出る場合の対処法
- 11. 【Rails】フォーム送信した値の前後空白改行を削除する(全角スペース削除対応)
- 12. rails でアプリを立ち上げ時に、データベースを指定する方法
- 13. 【Rails7 × Next.js】Dockerで環境構築してみる。
- 14. 【LeetCode】94. Binary Tree Inorder Traversalを解いてみた
- 15. 【LeetCode】88. Merge Sorted Arrayを解いてみた
- 16. 【Ruby】OpenStructを使ってオンデマンドにアクセッサーを生やす方法
- 17. 細かいつまずいたことをメモしておく(3月編)
- 18. コメント機能の実装
- 19. Bullet TrainでRailsの開発が何倍も速くなりました!
- 20. 【個人開発】「タバコ」辞めたくないけど減らしたい人へ向けた育成型喫煙管理アプリ【NICOTTI】(ニコッチ)を作成しました。
【Rails】checkboxのデザインを変更
## やりたいこと
checkboxのデザインを変更したい。
checkボックスの大きさや、位置は以下のように変更することはできる。
“`scss
input[type=checkbox] {
witdth: 20px
}
“`しかし、checkboxの枠の色とか、チェックした後の背景色など、細部のデザインを変更する方法にハマったので備忘録としてメモします。
## 方法
①デフォルトのデザインを消す
②labelを使って擬似的なcheckboxを作る
③labelのforにid指定をする
④check 後のデザインを作成する## ①デフォルトのデザインを消す
以下を追加するだけ
“`scss
input {
display: none;
}
“`## ②labelを使って擬似的なcheckboxを作る
以下のように <%=check_box // %>と隣接するようにlabelを設置する。
このlabelが後々、checkbox のデザインになっていきます。
“`html.erb<%= check_box Rubyのクラス(String・Integer・Array・Hash)・mapメソッド
デイトラ学習記録
# 目次
– [Stringクラス](#stringクラス)
– [Integerクラス](#integerクラス)
– [Arrayクラス](#arrayクラス)
– [Hashクラス](#hashクラス)
– [mapメソッド](#mapメソッド)# Stringクラス
“`Ruby
string = “Apple”
“`split
文字列をある特定の文字列で区切り、配列で取得する。“`Ruby
sentence = “I am a student”
words = sentence.split(” “)
puts words
#=> I
#=> am
#=> a
#=> student
“`include?
文字列の存在“`Ruby
sentence = “I am a student”
puts sentence.include?(“student”)
#=> true
“`gsub
文字列を置き換える“`Ruby
name = “tanaka”puts name.gsub(“a”, “o”)
puts naHerokuのコマンド一覧
# Herokuのコマンド一覧
[Heroku CLI コマンド 一覧](https://devcenter.heroku.com/ja/articles/heroku-cli-commands)##### 触れたことのあるコード 2022.02.17
“`Ruby
#アプリを一覧表示
$ heroku apps#新しいアプリケーションを作成
$ heroku create# Herokuのコマンド一覧を表示
$ heroku help#ログイン
$ heroku login
(–interactive herokuコマンドでブラウザを開かないようにできる)#最新のログ出力を表示
$ heroku logs#アプリケーションの名前を変更
$ heroku rename アプリ名#バージョン確認
$ heroku –version#データベースの更新をHeroku側で実行
$ heroku run rails db:migrate#メンテナンスモード
heroku maintenance:on
herolu maintenance:of【rails】join先テーブルの指定カラムの合計値算出を370倍高速化した話
前提知識
–`job_offers`(求人)テーブル
|field |type |
|—|—|
|wage(賃金) |integer | 賃金
|transport_expense(交通費) |integer | 交通費
|work_date(勤務日) |date | 働く日2022年3月30日の全ての求人の賃金と交通費の合計値を出したい場合、
以下のようにすれば簡単に取得できます。
“`ruby
JobOffer.where(work_date: “2022-03-30”).sum(“wage + transport_expense”)
(1.5ms) SELECT SUM(wage + transport_expense) FROM “job_offers”
=> 1000000
“`今回のテーマ
–では、`transport_expence`と`wage`が、`job_offers`テーブルのカラムではなく、別テーブルになっている設計の場合はどうすればいいでしょうか?
具体的にいうと以下のようなテーブル設計で、賃金と交通費の合【LeetCode】2. Add Two Numbersを解いてみた
## はじめに
コーディングテスト対策としてLeetCodeの2. Add Two Numbersを解いていく。## 問題文を和訳
– 2つの負ではない整数を表す2つの空でない連結リストが与えられます。
– 数字は逆の順序で格納され、各ノードには1つの数字が含まれます。
– 2つの数値を加算し、その合計を連結リストとして返します。
– 2つの数値には、数値0自体を除いて、先行ゼロが含まれていないと想定できます。
– Input: l1 = [2,4,3], l2 = [5,6,4]
– Output: [7,0,8]
– Explanation: 342 + 465 = 807.## 回答
“`2_AddTwoNumbers.rb
def add_two_numbers(l1, l2)
l3 = ListNode.new(0)
result = l3
carry = 0
while l1 && l2
sum = l1.val + l2.val + carry
carry = sum / 10
l3.next = ListNode.【LeetCode】100. Same Treeを解いてみた
## はじめに
コーディングテスト対策としてLeetCodeの100. Same Tree解いていく。## 問題文を和訳
– 2つの二分木pとqの根が与えられた場合、
– それらが同じであるかどうかをチェックする関数を記述します。
– 2つの二分木は、構造的に同一であり、
– ノードの値が同じである場合、同じであると見なされます。
– Input: p = [1,2,3], q = [1,2,3]
Output: true## 回答
“`100_SameTree.rb
def is_same_tree(p, q)
if p && q
return p.val == q.val && is_same_tree(p.left, q.left) && is_same_tree(p.right, q.right)
else
return p == q
end
end
“`## 最後に
難易度はEasyでした。Ruby を Julia にトランスパイル する Gem
# はじめに
`Ruby`を`Julia`にトランスパイルするgemがあったので遊んでみました。https://rubygems.org/gems/julializer
# インストール
“`rb
gem install julializer
“`https://www.rubydoc.info/gems/julializer/0.1.3
# トランスパイル
“`cmd
julializer xxx.rb# もしくは
bundle exec julializer xxx.rb
“`
トランスパイル結果を標準出力に表示します。
# 仕組み
https://github.com/remore/julializer/blob/master/lib/julializer.rb“`rb
require ‘ripper’
“`
行頭で`ripper`を呼んでいます。https://docs.ruby-lang.org/ja/latest/class/Ripper.html
おお、最近読んだ記事にありました、`Ruby プログラムのパーサ`ですね。
https:
【Rails】bcryptを使ったパスワードのハッシュ化と認証
## やりたいこと
bcryptを使って、新規ユーザー登録時におけるパスワードのハッシュ化と、ログイン時におけるパスワードの認証を実現したい。
## 前提
・パスワードは平文で保存するのはNG。
・セキュリティ上、ハッシュ値に変換して保存する。そもそも暗号化とハッシュ化の違いを理解できていなかったのでメモります。
その違いとは、**不可逆性があるかどうか。****暗号化は不可逆性がある。つまり、暗号化した後に元に戻せる。**
**ハッシュ化は不可逆性がない。つまり、一度ハッシュ化すると元に戻せない。**## 方法
パスワードの生成には`BCrypt::Password.create`
パスワードの認証には`BCrypt::Password.new`
を利用する## 新規ユーザー登録でやりたいこと
・入力した生パスワードをハッシュ化して保存する。
Railsには以下のGemがデフォルトで入っているのでそれを利用する。“`ruby
gem ‘bcrypt’, ‘~> 3.1.7’
“`パスワードの生成には`BCrypt::Password.creat
Rubyのクラスのコード
デイトラ学習記録
“`Ruby
class Todo
VERSION = 1attr_accessor :title, :time, :tasks
def initialize(title, time)
@title = title
@time = time
@tasks = []
enddef self.create(title, time, task)
todo_work = self.new(title, time)
todo_work.add_tasks(task)
return todo_work
enddef add_tasks(task)
self.tasks.push(task)
enddef describe
puts all_tasks
endprivate
def all_tasks
“#{self.time}\n#{self.tasks.join(“・”)}”
end
endclass Kanban < T
Rails 6.1.5で uninitialized constant Mail::TestMailer というエラーが出る場合の対処法
Railsでメールを送信しようとすると以下のようなエラーが出る場合があります。
“`
NameError (uninitialized constant Mail::TestMailerdelegate :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 # 先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.gyazoBullet 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/
## アプリを作ったきっかけ
私には喘息持ちでヘビースモーカーな兄がいます。
喫煙を控えるように伝えても「禁煙したら逆にストレスで死ぬ」といつも言われるので、調べてみると多くの人が同じような経験あるとのこと。喫煙をする人に多いのが「なんとなくの喫煙」で余分にタバコを吸ってしまうことです。(自分がそう)「禁煙」と聞けば大変そうですが、「余分な喫煙」をなくすくらいならできそうな気がします。
せめて、私の兄に喫煙本数を減らさせることはで関連する記事
OTHERカテゴリの最新記事
- 2024.09.19
JavaScript関連のことを調べてみた
- 2024.09.19
JAVA関連のことを調べてみた
- 2024.09.19
iOS関連のことを調べてみた
- 2024.09.19
Rails関連のことを調べてみた
- 2024.09.19
Lambda関連のことを調べてみた
- 2024.09.19
Python関連のことを調べてみた