- 1. to_i(num)がつまづいた件
- 2. Railsで子モデルの所有数ランキングを取得するスコープの書き方
- 3. railsチュートリアル 第13章 マイクロポストのサンプル
- 4. railsチュートリアル第十四章 ユーザーをフォローする
- 5. railsチュートリアル第13章 マイクロポストを表示する
- 6. railsチュートリアルMysql化とDocker化
- 7. gem ‘date’のReDos脆弱性についての内容と対応の注意点 [CVE-2021-41817]
- 8. 【Rails】seedファイルについて
- 9. kaminariを使用してbootstrap5でCSSを追加する
- 10. Stripeで従量課金、かつ最初の数人は無料というサービスの設計
- 11. 文字列の結合の種類
- 12. RSpecの導入と単体テストコードを書く
- 13. Macで.devドメインに繋げない場合の対処法
- 14. railsチュートリアル第13章 User/Micropostの関連付け
- 15. railsチュートリアル第13章 マイクロポストを改良する
- 16. railsチュートリアル第13章 Micropostのバリデーション
- 17. RailsのCredentialsの作り方
- 18. 【Rails 】Dockerで使用したコマンド集
- 19. Herokuの登録からRailsアプリ(docker)のデプロイまで
- 20. 【Rails】定数の呼び出し方
to_i(num)がつまづいた件
RubySilverの勉強中疑問に思ったことがあったので備忘録として記していきます。
##to_s と to_i 使い方
to_s => 数値を文字列に変換
to_i => 文字列を数値に変換“`ruby:例
n = 8
puts n.to_s #文字列に変換
# => 8n = “8”
puts “8”.to_i # 数値に変換
# => 8
“`##to_s と to_i に引数を設定
to_s と to_i に引数を設定することで基数を変えることができます。
to_s にも使えることは少し驚きでした。
下記の1つ目の例を解説すると
**10進数**の8を**2進数**で表すという処理を行っています。2つ目は**2進数**の8を**10進数**で表すという処理を行っています。
2進数は0と1で表すので無視されます。よって、0が出力されます。3つ目は**2進数**の100を**10進数**で表すという処理を行っています。
ここで100は百ではなく100という文字列であることに注意してください“`ruby:例
n = 8
puts n.to_s(2)
Railsで子モデルの所有数ランキングを取得するスコープの書き方
個人開発で必要になったのですが、どこにも書いておらず調べるのが大変だったので残しておきます。
“`ruby:app/model/parent.rb
class Parent < ApplicationRecord has_many :children, dependent: :destroy scope :how_many_children, -> { joins(:children).group(“parent.name”).order(count_all: :desc).limit(3).count }
# => {“親名”=>子テーブル所有数(一位), “親名”=>子テーブル所有数(二位), “親名”=>子テーブル所有数(三位)}
end
“`今思えば[これ(Railsガイド)](https://railsguides.jp/active_record_querying.html#%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E5%8C%96%E3%81%95%E3%82%8C%E3%81%9F%E9%A0%85%E7%9B%AE
railsチュートリアル 第13章 マイクロポストのサンプル
###マイクロポストのサンプル
####サンプルデータにマイクロポストを追加する
db/seeds.rb“`rb
# メインのサンプルユーザーを1人作成する
User.create!(name: “Example User”,
email: “example@railstutorial.org”,
password: “foobar”,
password_confirmation: “foobar”,
admin: true,
activated: true,
activated_at: Time.zone.now)
# create!は基本的にcreateメソッドと同じものですが、
# ユーザーが無効な場合にfalseを返すのではなく例外を発生させる
# admin:trueにして管理者にする
# サーバーのタイムゾーンに応じたタイムスタンプ# 追加のユーザーをまとめて生成する
# メイン
railsチュートリアル第十四章 ユーザーをフォローする
#ユーザーをフォローする
他のユーザーをフォロー(およびフォロー解除)できるソーシャルな仕組みの追加と、
フォローしているユーザーの投稿をステータスフィードに表示する機能を追加します。ユーザー間の関係性をどうモデリングするかについて学びます
モデリング結果に対応するWebインターフェースを実装していきます。
このとき、Webインターフェースの例としてAjaxについても紹介します。最後に、ステータスフィードの完成版を実装します。ステータスフィード作成のためにRuby/SQLを「だます」テクニックも含まれます。
これまでよりも複雑なデータモデルを使います。
ここで学んだデータモデルは、今後自分用のWebアプリケーションを開発するときに必ず役に立ちます。モックアップ
工業製品の設計・デザイン段階で試作される、外見を実物そっくりに似せて作られた実物大の模型のこと。##Relationshipモデル
ユーザーをフォローする機能を実装する第一歩は、データモデルを構成することです。“`
git checkout -b following-users
“`“`
ubun
railsチュートリアル第13章 マイクロポストを表示する
##マイクロポストを表示する
ユーザーのshowページで直接マイクロポストを表示させる
最初に極めてシンプルなERbテンプレートを作成します。
サンプルデータ生成タスクにマイクロポストのサンプルを追加して、画面にサンプルデータが表示されるようにしてみます。###マイクロポストの描画
Micropostのコントローラとビューを作成するために、コントローラを生成しましょう。“`rb
ubuntu:~/environment/sample_app (user-microposts) $ rails generate controller Microposts
Running via Spring preloader in process 3861
create app/controllers/microposts_controller.rb
invoke erb
create app/views/microposts
invoke test_unit
create test/controllers/mic
railsチュートリアルMysql化とDocker化
今回、下記の動画を参考にしつつRailsチュートリアルのプロダクトをDocker化させてみました。
Docker超入門講座 合併版 | ゼロから実践する4時間のフルコース
[https://www.youtube.com/watch?v=lZD1MIHwMBY&t=3538s](https://www.youtube.com/watch?v=lZD1MIHwMBY&t=3538s)railsチュートリアルではデフォルトではpostgresqlが選択されていますが、IT企業で採用されているデータベースはMysqlが一番多いという話を聞いたので変更してみます(上記紹介動画でもmysqlが紹介されております。mysql8系で紹介されておりますが、herokuの無料プランが5系のみとの事なので5系でDBを設定します。)
ただ、M1のMacの場合はDockerでMysqlは、サポートされていないのでMariaDBにした方が良いです。(私はintelのMacとM1のMacを持っているので今回は試験的にmysqlにしてますが、恐らくこの先、新しくプロダクトを作る場合mysqlを選択するなら
gem ‘date’のReDos脆弱性についての内容と対応の注意点 [CVE-2021-41817]
# 脆弱性の内容
`Date.parse`は、内部でRegexpsを使用しており、その一部は正規表現のサービス拒否に対して脆弱です。
このようなメソッドを信頼できない入力に適用するアプリケーションとライブラリが影響を受ける可能性があります。## 脆弱性に対する修正内容
この修正により、正規表現を変更する代わりにデフォルトで入力長が最大128バイトに制限されます。
これは、’date’ gemが多くの正規表現を使用しており未発見の脆弱な正規表現がまだ存在する可能性があるためです。
互換性を維持するには次のようにlimitキーワードに明示的にnilを渡すことで制限を取り除くことができますが解析に時間がかかる場合があることに注意してください。“`ruby
Date.parse(str, limit: nil)
“`
# 脆弱性への対応日付gemをバージョン3.2.1、3.1.2、3.0.2、および2.0.1以降に更新してください。
`gem update date`コマンドを実行して更新することができます。
bundlerを使用している場合は、Gemfileに以下を追加し
【Rails】seedファイルについて
## はじめに
今回Railsのアプリを作成中に多くのユーザー情報が必要となったことをきっかけに、
seedファイルを使用したので、備忘録です。
今回はuserの作成をします。devise導入済み。## seedファイルとは
開発を進めていく中で、データを一件一件登録することはとてもめんどくさいですよね。
そのようなときにseedファイルを作成することで、初期データが作成できます。
大量なユーザー情報等を一気に作成することができるので、とても便利です。## 導入してみる
簡単なものであれば特別なことは必要なく、ファイルに記述するのみです。
単体であれば“`db/seeds.rb
User.create!(
email: “test@test.com”,
name: “test1”,
passward: “111111”
)
“`
複数であれば“`db/seeds.rb
10.times do |n|
User.create!(
email: “test#{n + 1}@test.com”,
name: “test#{n + 1
kaminariを使用してbootstrap5でCSSを追加する
#はじめに
railsチュートリアルをローカル環境で進めています。
will_pagenate gemを使っていますが、kaminariを使って実装してみようと興味本位でやってみた備忘録です。
こちらの記事を参考にされる方はバージョンにお気をつけください。#環境
ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [arm64-darwin20]
Rails 6.1.4.1
kaminari (1.2.1)
bootstrap (5.1.0)#前提
bootstrapがアプリ内で使えているものとします。https://qiita.com/mocomou_/items/95f1be13c9b0aafc422b
bootstrapの導入はこちらでどうぞ。
#①kaminariのインストール
https://rubygems.org/gems/kaminari
こちらからkaminariをインストールします。
これだけだと
![no-CSS-paginate.png](https://qiita-image-store.s3
Stripeで従量課金、かつ最初の数人は無料というサービスの設計
# はじめに
Stripeで下記のような従量課金の仕様で設計する方法をまとめました。Githubのようにチームメンバーが増えると共に使用量が増える料金モデルです。
もっと良い方法があったら教えて欲しいです。(最後の問題点というところにまとめました)– 人数に応じて月額課金
– 最初の3人は無料
– 集計月の最大登録人数で課金# 商品の追加
Stripeのコンソールで商品の追加->新しい料金の追加で下記のように設定します。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312001/f3575f95-3634-72fd-b46c-a9b8fc398d73.png)
これで最初の3人は無料、その後1人増えるごとに500円月額課金する料金体系ができました。
また、課金数量は集計月の最大数量で計算されます。(つまり課金の対象となる人数が増えたり減ったりしても、集計月の中で最大になった時の数が使われます)似たようなもので数量ベースの料金体系がありますが、この場合数量が増えると最
文字列の結合の種類
RubySilverの勉強中、文字列の結合のメソッドがいくつか出てきたので備忘録として記していきます。
##文字列の結合
文字列を結合する方法は主に + 演算子とconcatメソッド、<< の3種類あります。 concatと << は破壊的メソッドなのに対し、 + 演算子は非破壊的メソッドです。 ### + 演算子の使い方 ```ruby:例 s1 = Leo s2 = Messi puts s1 + s2 # => LeoMessi
“`### concatの使い方
“`ruby:例
s1 = Leo
s2 = Messis1.concat(s2)
puts s1
# => LeoMessi
“`### << の使い方 ```ruby:例 s1 = Leo s2 = Messi s1 << s2 puts s1 # => LeoMessi
“`参考記事
[【Ruby】concatを使って文字列や配列を結合する](https://style.potepan.com/articles/27074.html)
RSpecの導入と単体テストコードを書く
#①.nicknameに対するバリデーションを設定
サンプルアプリを例として、事前準備します!
実装時においては、nicknameに対してバリデーションを設けていません!
今回はバリデーションに関するテストを実装します!
そこで、「nicknameを入力しないと、ユーザーが登録できない」というバリデーションを設定します!
user.rbを開き、以下のように記述します!
“`php:app/models/user.rb
class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable has_many :eats h
Macで.devドメインに繋げない場合の対処法
Macのブラウザから `http://lightship.dev` に接続しようとすると403が出たので調べました。
.devドメインがlocalhost(127.0.0.1)を指してたので、以下の手順で解決しました。### 修正手順
ターミナルで、次のコマンドを入力します。
`cd /etc/resolver/ && ls`
Enterキーを押したときにエントリ名が表示された場合、これはワイルドカードリゾルバであり、.devドメインへのアクセスのすべての試行を127.0.0.1にポイントしている可能性があります。
これは以下のコマンドで削除できます。
`sudo mv dev dev.ignore`
これで.devドメインにアクセスできます。
railsチュートリアル第13章 User/Micropostの関連付け
###User/Micropostの関連付け
####マイクロポストがユーザーに所属する関連付け
app/models/micropost.rb“`rb
class Micropost < ApplicationRecord # ApplicationRecordを継承したモデルが作られます belongs_to :user # userモデルとの間に「1対1」のつながりが設定 # 割り当てる validates :user_id, presence: true # presence これは存在するか # presenceメソッドはオブジェクトが存在すればそのオブジェクトを返し、 # オブジェクトが存在しなければnilを返すメソッドとなります validates :content, presence: true, length: { maximum: 140 } # 最大140文字まで end ``` ####ユーザーがマイクロポストを複数所有する(has_many)関連付け app/models/user.rb ````rb clas
railsチュートリアル第13章 マイクロポストを改良する
###マイクロポストを改良する
#####デフォルトのスコープ
新しい順にマイクロポストを表示させる。
そのためにdefault scopeというテクニックを使う。####マイクロポストの順序付けをテストする
test/models/micropost_test.rb“`rb
require ‘test_helper’
.
.
.
test “order should be most recent first” do
assert_equal microposts(:most_recent), Micropost.first
# microposts(:most_recent) データベース上の最初のマイクロポスト
# Micropost.first fixture内のマイクロポスト
# 上二つが等しいか?
# マイクロポストのfixtureがあるという前提に依存しています。
end
end
“`####マイクロポスト用のfixture
test/fixtures/microposts.yml“`
orange:
railsチュートリアル第13章 Micropostのバリデーション
###Micropostのバリデーション
####新しいMicropostの有効性に対するテスト
test/models/micropost_test.rb“`rb
require ‘test_helper’class MicropostTest < ActiveSupport::TestCase def setup @user = users(:michael) # このコードは慣習的に正しくない @micropost = Micropost.new(content: "Lorem ipsum", user_id: @user.id) # micropostのカラムに情報を入力 end test "should be valid" do assert @micropost.valid? # 有効? end test "user id should be present" do # あらゆるマイクロポストはユーザーのidを持っているべき @micropost.user_id = nil
RailsのCredentialsの作り方
Rails触った事ないけどある日突然production.keyを作成する事になり四苦八苦したので記録。
#Railsのproduction.keyとは
production環境の暗号化されたファイル**production.yml**を復号するためのキー。
暗号化されたファイルにはプロジェクトの機密情報が含まれ、暗号化されたファイルをバージョン管理し、キーはバージョン管理から外す。
production.ymlというのは作成時に環境を指定したからこの名前になっており、基本的にはcredentials.ymlというのが暗号化されたファイルの名称。#Credentialsの作り方(基本)
####既存のキーの確認方法
下記のような感じで確認する“`shell
$ EDITOR=”vi” bin/rails credentials:show
# aws:
# access_key_id: 123
# secret_access_key: 345# Used as the base se
【Rails 】Dockerで使用したコマンド集
## 用語
| 名称 | 説明 |
|:-:|:-:|
|Dockerエンジン|Dockerにおいてコンテナ型仮想化を実現するためのコア|
| Dockerコンテナ | Dockerイメージをもとに作成されるコンテナ型仮想環境 |
| Dockerイメージ | Dockerコンテナ作成時に必要な雛形となるもの。できたアプリケーションをイメージとして保存して、別のサーバーでも同じ環境を再現できる。|
| Dockerfile | Docker イメージをビルドする為の手順を記載するファイル|#コマンド
## Dockerコンテナの起動、構成、Dockerイメージの作成まで一気に実行+(Gemfile変更時)
“`
docker-compose build
“`## コンテナ起動
“`
docker-compose up#バックグラウンドでコンテナ起動
docker-compose up -d
“`## コンテナ停止
“`
docker-compose stop
“`
## コンテナ削除“`
docker-compose down
`
Herokuの登録からRailsアプリ(docker)のデプロイまで
#内容
Docker勉強会用にHerokuの登録からデプロイまでの流れをまとめる。
[Docker 公式](https://docs.docker.com/samples/rails/)を参考にRailsアプリを作成する。#開発環境
MacOS Big Sur
Homebrew:3.3.1
Docker:20.10.8
Docker Compose:v2.0.0
heroku:7.59.1#登録方法
[heroku](https://jp.heroku.com/)から新規登録する。
無料アカウントを作成後、アカウントをアクティブ化するためのメールが届くので、リンクをクリックする。[多段階認証(MFA)の登録](https://devcenter.heroku.com/articles/multi-factor-authentication)を求められるので、好きなものを追加する。
これで、登録は完了。
#heroku CLIのインストール
[The Heroku CLI](https://devcenter.heroku.com/articles/heroku
【Rails】定数の呼び出し方
##環境
Ruby 3.0.2
Rails 6.1.4.1##定義と呼び出し方
“`ruby
class Hogehoge
TARGET_ARTICLES_COUNT = 100.freeze
end
“`“`ruby
Hogehoge::TARGET_ARTICLES_COUNT
# => 100
“`他のクラスやモジュールで定義された定数を参照するには“`::演算子“`を使って定数のパスを指定。
トップレベルの定数を確実に参照するにはパスを“`::“`から始めると外部の定数を絶対パスで指定できる。##参考
https://railsguides.jp/constant_autoloading_and_reloading.html