- 1. Rubyでgets.chompについて
- 2. Arrayオブジェクトの基礎
- 3. 【minitest】 request.refererを使用する方法
- 4. 【Rails】ポリモーフィックが便利〜
- 5. 【Rails】rails db: から始まるコマンドまとめ
- 6. 【Rails】同じグループのアクションのルーティングをネストと非ネストに分ける
- 7. 【Rails】Renderにデプロイしたらビルドエラーが起こった
- 8. Railsでフォームから送付された画像をpublicフォルダに保存する方法
- 9. optparseの使い方
- 10. Railsで画像を保存する際のassets配下とpublic配下の違い
- 11. VSCodeでRailsのCtrl+Clickで参照元にいけない
- 12. Rubyで、Gem::FilePermissionErrorが表示された時の対処
- 13. 【Ruby】Class&インスタンスの理解と活用方法
- 14. Sporockets::FileNotFoundのエラー解決方法
- 15. [Ruby]シンボルとは何か。文字列との違いもはっきりさせたい。
- 16. [Ruby] 委譲(def_delegators)を理解する
- 17. 【Ruby】case文をハッシュに変えたら少しだけ幸せになれた話
- 18. 診断機能(ポイント制)
- 19. Rails7 で TODOアプリを作ろう ⑨ (Enumや日時のバリデーション)
- 20. ターミナル上に時計を表示する
Rubyでgets.chompについて
入力されたコメントを出力し、「終了」が入力されたら「終了します」と出力して終わるプログラムを作成します。
「終了」入力されるまで繰り返すので
“`
while true
“`
を使って繰り返して
“`
break
“`
で抜ければいいので
“`
while true
comment = gets
if comment!=”終了”
puts “あなたのコメント: #{comment}”
else
puts”終了します”
break
end
end
“`
と記述しました。しかし
#### 「終了」を入力したのに止まりません💦
そこで、`gets`の後ろに`.chomp`を追記して
“`
while true
comment = gets.chomp
if comment!=”終了”
puts “あなたのコメント: #{comment}”
else
puts”終了します”
break
end
end
“`
と変更すると#### 無事「終了」で終わることがで
Arrayオブジェクトの基礎
## `Array`オブジェクトの基本的な使い方
配列とも呼ばれ、複数の順番に並べて保持できるオブジェクトです。
#### [Array](https://docs.ruby-lang.org/ja/latest/class/Array.html)の基本的な使い方は以下の通りです。>array = [1,2,”aaa”,4]
(ここで言うarrayはただの変数です。arrayじゃなくてdoreaemonでも何でもOKです。)### 実際に活用してみよう!
#### Arrayの中のひとつを参照したいとき
“`
array = [“nobita”,”sizuka”,”suneo”,”gian”]
puts array[2]
“`
“`
#実行結果suneo
“`
#### 要素を末尾に追加
>Arrayオブジェクト << "要素" ``` array = ["nobita","sizuka","suneo","gian"] p array << "doraemon" ``` ``` #実行結果 ["nobita","sizuka","sune
【minitest】 request.refererを使用する方法
# はじめに
最近`request.referer`という便利なものがあることを知り、使用する機会がありました。
ですが、minitestを書いている際にリファラを用いたアクションのテストがうまくいかず少し苦戦してしまったため、備忘録を兼ねてここに残しておこうと思います。# そもそもrequest.refererってなに?
リクエストヘッダーが持っている情報の一つであり、遷移前のURLを取得することができます。そのため、`request.referer`を活用することで、
– どのページからの流入なのかアクセス解析ができる
– 遷移元のURLに戻りたい時にリダイレクト先として使用できるといったメリットがあります。
今回は後者のように、`request.referer`をリダイレクト先として使用した時の、minitestの書き方について考えます。
# minitestでのrequest.referer
ここでは`request.referer`を使用して、遷移元のURLに再度リダイレクトするようなアクションのテストを作成することを考えます。“`rb
# get
【Rails】ポリモーフィックが便利〜
どうもこんにちは。
今回はポリモーフィックについてまとめます。
# ポリモーフィックってなんぞや?
ポリモーフィックとは、複数のモデル同士の関連付けの考え方です。
この考え方は、異なるモデルを単一の関連で扱う機能です。
例えば、以下のようにテーブルが存在しているとします。
commentsテーブル
| カラム名 | 型 | 値1 | 値2 | 値3 |
| — | — | — | — | — |
| id | integer | 1 | 2 | 3 |
| comment | text | ワンちゃんかわいい!! | よろしくお願いします。 | この時期寒くね? |
| article_id | integer | null | 1 | null |
| photo_id | integer | 2 | null | null |
| tweet_id | integer | null | null | 1 |articlesテーブル
| カラム名 | 型 | 値1 | 値2 |
| — | — | — | — |
| id | in
【Rails】rails db: から始まるコマンドまとめ
どうもこんにちは。
今回はRails開発で使う`rails db:`から始まるコマンドをまとめてみました。
# データベース作成
以下のコマンドでアプリケーションで使用するためのデータベースを作成します。
“`
$ rails db:create
“`# データベース削除
以下のコマンドでアプリケーションで使用していたデータベースを削除します。(データやテーブル、カラムなどが全て消えます。)
“`
$ rails db:drop
“`# データベースを最新にする
以下のコマンドでデータベーススキーマの状態を最新の状態にします。
“`
$ rails db:migrate
“`マイグレーションファイルは以下のコマンドで生成します。
“`
rails g migration AddAgeToUserModel
“`生成されるマイグレーションファイルは以下のようになります。
“`ruby
class AddAgeToUserModel < ActiveRecord::Migration[6.0] def change
【Rails】同じグループのアクションのルーティングをネストと非ネストに分ける
# はじめに
オリアプに関して、実装時に考えていたことを忘れないように頭の整理目的で書き残したいと思います。
実装途中の話を公開しますので、見た人がわかるような文章構成になっていない可能性があります(全部語ると長くなり、本来のメイン目的である頭の整理に沿わないため)。
結論だけ知りたい方は「解決方法」だけ見ればOKです。
また、必ずしも時系列ではないです。# 自分のこと
先日プログラミングスクールを卒業して現在転職活動中です。
プログラミング未経験の状態からプログラミングスクールに通い始めました。
転職活動と同時並行でオリジナルアプリの開発をしています。# オリジナルアプリについて
マンション管理アプリを作成しています。
メイン機能としては分譲マンションの管理会社が社内で使用する(想定の)業務アプリです。
サブ機能として、マンション住民も一部の機能にアクセスできるようにしています。
## アプリのコンセプト
これを知らないと、この人は何をそんなにこねくり回しているんだとなりそうなので、このアプリのポイントを2つ挙げます。
### ・複数のユーザーモデルが存在する
【Rails】Renderにデプロイしたらビルドエラーが起こった
# 概要
Railsチュートリアルの第7章を進めていた時、
TLSと本番環境用の設定をRenderにデプロイしたときにビルドエラーが発生しました。“`
ActiveRecord::ConnectionNotEstablished: could not translate host name “****” to address: Name or service not knownCaused by:
PG::ConnectionBad: could not translate host name “****” to address: Name or service not knownTasks: TOP => db:migrate
(See full trace by running task with –trace)
==> Build failed 😞
“`# 結論(解決策)
PostgreSQLのリージョンをシンガポールからオレゴンに変更した# 試したこと
## PostgreSQLのVersionを15に変更する
Railsチュートリアルが更新された
Railsでフォームから送付された画像をpublicフォルダに保存する方法
# Railsでフォームから送付された画像をpublicフォルダに保存する方法
Railsを用いてWebアプリケーションを構築する際、フォームからアップロードされた画像をサーバー上に保存する必要があることがよくあります。本記事では、フォームから送付された画像をpublicフォルダに保存する方法について詳しく解説します。この方法は、特に画像の名前をユーザーのIDに基づいて管理したい場合に有用です。
## 画像ファイル名の保存と変更
### 画像ファイル名の設定
まず、ユーザーに関連付けられた画像ファイルの名前を設定します。これは、ユーザーのレコードが作成された後、そのIDを使用して行います。
#### イメージ名の生成
“`ruby
@user.image_name = “#{@user.id}.jpg”
“`上記のコードでは、ユーザーのIDを取得し、それをファイル名の一部として使用しています。これにより、各ユーザーにユニークな画像ファイル名が割り当てられます。
## フォームからの画像データの受け取り
### 画像データの取得
フォームから送信された画像データ
optparseの使い方
# optparseとは
`octparse`は標準ライブラリの内の1つで、コマンドラインのオプションを使うためのライブラリです。## 使い方
1. `OptionParser`オブジェクトoptを生成
2. オプションを取り扱うブロックをoptに登録する
3. opt.parse(ARGV)でコマンドラインを実際にparseする
## 1. `OptionParser`オブジェクトoptを生成
optparseライブラリを読み込んで、OptionParseオブジェクトoptを生成します。
“`sample.rb
require ‘optparse’
opt = OptionParser.new
“`## 2. オプションを取り扱うブロックをoptに登録する
onメソッドを使用し、引数でオプション`-a`と`-b`を定義し、引数が指定されたときの処理をブロック内に記述する
“`sample.rb
opt.on(‘-a’) {|v| p v }
opt.on(‘-b’) {|v| p v }
“`## 3. opt.parse(ARGV)でコマンドラインを実際にpar
Railsで画像を保存する際のassets配下とpublic配下の違い
# Railsで画像を保存する際のassets配下とpublic配下の違い
Railsアプリケーションにおけるアセット管理は、画像、スタイルシート、JavaScriptなどの静的ファイルを効率的に扱うための重要な部分です。特に画像ファイルの配置には、`assets`ディレクトリと`public`ディレクトリの2つの主要な選択肢があります。これらの違いを理解することは、Rails開発において重要です。この記事では、`assets`ディレクトリと`public`ディレクトリの特徴と使い分けについて詳しく解説します。
## assets配下に画像を保存する
### assetsディレクトリの役割
#### 概要
`assets`ディレクトリは、Railsアセットパイプラインの一部として機能します。アセットパイプラインは、JavaScriptファイル、スタイルシート、画像などのアセットを効率的に管理し、配信するための仕組みです。
#### 特徴
– **プリコンパイル**: `assets`ディレクトリに置かれた画像は、本番環境へのデプロイ時にプリコンパイルされます。これにより、
VSCodeでRailsのCtrl+Clickで参照元にいけない
# はじめに
仕事でRailsを最近書いているのですが、そこでこまったことをまとめておきます
# 問題
Railsを使っている上でモデルのメソッドなどにとびたいときがあります
そのときに**Ctrl + Click**で以前は参照元に飛んでいたのですが、いま拡張機能をいれてもその機能が使えませんでした# 解決方法
最新のRubyの拡張はその機能が使えなくなっているそうです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/4f6c2308-89ce-e438-c6bd-2ca324f8e55d.png)
少し前の**非推奨**のバージョンであれば利用できるのでそちらをインストールしました
**Ctrl + p**でコマンド`ext install rebornix.Ruby`を実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/8fca6fc0-
Rubyで、Gem::FilePermissionErrorが表示された時の対処
久々にRubyを触っていると、gem install minitestで権限エラーになりました。
“`
ERROR: While executing gem … (Gem::FilePermissionError)
You don’t have write permissions for the /Library/Ruby/Gems/2.6.0 directory.
“`
調べてみると、原因はシステムのRubyが使われているから、
権限エラーになっているとのことでした。
“`
% which ruby
/usr/bin/ruby
“`
rbenvのRubyが使われる設定になっていません。
.zshrc(bashの人は.bashrc)に、以下の記述を入れました。
“`
% vi ~/.zshrc
“`
“`
[[ -d ~/.rbenv ]] && \
export PATH=${HOME}/.rbenv/bin:${PATH} && \
eval “$(rbenv init -)”
“`
自分のユーザのhomeパス + rbenvのRubyパスが
【Ruby】Class&インスタンスの理解と活用方法
# 【Ruby】Classとインスタンスの理解と活用方法
Rubyプログラミングにおいて、クラスとインスタンスは非常に重要な概念です。クラスはオブジェクトの設計図のようなもので、インスタンスはその設計図に基づいて作成された具体的なオブジェクトを指します。この記事では、Rubyにおけるクラスとインスタンスの基本的な使い方を詳しく解説していきます。
## クラスの定義方法
### クラスの基本構造
“`ruby
class クラス名
# クラスの内容
end
“`Rubyでは、クラス名は大文字で始める必要があります。クラス内にはメソッドや変数を定義し、オブジェクトの振る舞いや状態を定義します。
### インスタンス変数とattr_accessor
“`ruby
class クラス名
attr_accessor :インスタンス変数名
end
“``attr_accessor`は、インスタンス変数のゲッターとセッターを自動的に定義するメソッドです。これにより、インスタンス変数へのアクセスや変更が簡単になります。
### メソッド
“`ruby
clas
Sporockets::FileNotFoundのエラー解決方法
# Sporockets::FileNotFoundのエラー解決方法
Ruby on railsでアプリを作成中にエラーが出てきたので
原因と対処法を書いていきます。## なぜエラーが出たのか?
gemを導入してターミナルで
`bundle install`
を実行した後に
localhost:3000/
でブラウザを開こうとしたらエラーが出ました。## 対処法
ターミナルで
Ctrl+CでRailsサーバーを切り、再度`rails s`を実行する。gemをインストールした後は
サーバーの再起動を徹底します!
[Ruby]シンボルとは何か。文字列との違いもはっきりさせたい。
ハッシュでよく使われるシンボルですが、ハッシュ以外でシンボルとシングルクオートが並んでいるコードを見た時、なぜ違う書き方をしているのか理解できないことがありました。
私にはどちらも同じものに見えており「そこ、シングルクオートで書いてしまえばいいのでは?」と思ったからです。
しかし、実際は**文字列に見えるようでシンボルと文字列は異なるものである**ということを知りました。
そこで、シンボルについての理解を深めるために、改めてまとめてみようと思いました。## シンボルとは
“`
# シンボルは:strを指す
str = :str
“`
Rubyのリファレンスマニュアルには以下のように説明されています。
>シンボルを表すクラス。シンボルは任意の文字列と一対一に対応するオブジェクトです。>Rubyの内部実装では、メソッド名や変数名、定数名、クラス名など の`名前’を整数で管理しています。これは名前を直接文字列として処理するよりも 速度面で有利だからです。そしてその整数をRubyのコード上で表現したものがシンボルです。(中略)シンボルは、ソース上では文字列のように見え、内部では整数
[Ruby] 委譲(def_delegators)を理解する
Rubyには`def_delegators`というメソッド委譲と呼ばれる処理を行うためのクラスメソッドが定義されています。ちなみに、RailsのActiveSupportにも`delegate`という同じようなメソッドがあります。
メソッド委譲を使うと、クラス外で定義されているメソッドを、あたかもインスタンスメソッドのように呼び出すことができるようになります。
“`ruby
class Person
attr_accessor :name
attr_accessor :age
endclass Staff
attr_accessor :person
def_delegators :person, :name, :age
endp = Person.new
p.name = “Taro”
p.age = 20s = Staff.new
s.person = ppp s.name # => Taro
“`## コードリーディング
まずは、`delegate`メソッドは次のように定義されています。
“`ruby:forward
【Ruby】case文をハッシュに変えたら少しだけ幸せになれた話
## はじめに
どうもこんにちはもきお([@mokio_50](https://twitter.com/mokio_50))です。今回は実務で「おっ、これいいじゃん」と思ったちょっとしたリファクタリングになります。例として今回は東海オンエアのメンバーからメンバーカラーを返すと言うのを例にしました。
## if文をcase文に
一番条件分岐でオーソドックスなif文で書くと
“`ruby:
member = “ゆめまる”if member == “てつや”
“オレンジ”
elsif member == “りょう”
“ブルー”
elsif member == “しばゆー”
“イエロー”
elsif member == “ゆめまる”
“ピンク”
elsif member == “虫眼鏡”
“ブラウン”
elsif member == “としみつ”
“グリーン”
end
“`
今回は`ゆめまる`なので`ピンク`が表示されるでしょう。続いてcase文を用いて書くと
“`ruby:
member = “ゆめまる”case member
when
診断機能(ポイント制)
Ruby on Rails でポイント制の診断機能を実装する。
おすすめのキャラクターの診断ができる機能を実装する。## 開発環境
– Ruby3.0.6## 診断設計
Question1からQuestion3に対して「はい」→キャプテンアメリカに+1
Question4からQuestion6に対して「はい」→アイアンマンに+1
Question7からQuestion9に対して「はい」→スパイダーマンに+1
Question10からQuestion12に対して「はい」→ソーに+1
計12問の「はい/いいえ」の質問に回答すると、「はい」の数が最も多いキャラクターが表示される。## 手順
1. モデル
2. ルーティング
3. コントローラー
4. ビュー## 1. モデル
question1からquestion12の計12個(データ型がinteger)のカラムを持つTestモデルを作成する。
“`cmd
rails g model Test question1:integer question2:integer …
“`“`cmd
rails db:migr
Rails7 で TODOアプリを作ろう ⑨ (Enumや日時のバリデーション)
## はじめに
### 前回は
#### バリデーションメッセージのテンプレート化 として
https://qiita.com/tomoaki-kimura/items/57eb705ceeb228161fe6
– コンソール
– バリデーション
– errors
– バリデーションメッセージについて学びました。
### 今回は
#### Enumや日時のバリデーション として
– Enumのバリデーション
– カスタムバリデーション
– 日時のバリデーション
– タイムゾーンについて学びます。
では、はじめていきましょう。
## 1. バリデーションヘルパー
### ヘルパー一覧
バリデーションに関しては、かなりの項目数になるので、一度Railsガイドに目を通してみると良いでしょう。
https://railsguides.jp/active_record_validations.html
今回は、Rails7以降で追加された便利なバリデーションを含めてやっていきましょう。
## 2. Enumのバリデーション
### validate: tru
ターミナル上に時計を表示する
# やりたいこと
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179154/26fc6d54-aec5-9d15-b936-3478222f14cd.png)
ターミナル上に時計を表示したいこと(`date` コマンドではなくリアルタイムで更新される時計がほしいこと)が稀にあります。
# Rubyワンライナー
“`shell
ruby -e ‘loop { t = Time.now.strftime(“%T”); print “\b” * t.size ; print t; sleep 0.1}’
“``”\b”` で1文字削除できるので、適当な間隔で削除→時刻を再表示すればよろしい。