- 1. IPAddrを利用せずにIPをvalidateする
- 2. each 入れ子
- 3. 二重ハッシュ
- 4. 値(3教科)の平均値を計算する。
- 5. 【初心者向け】4パターンのバリデーションレベルについて学ぶ【Rails】
- 6. indexメソッドを使って検索
- 7. Rubyにおける3つの変数とは
- 8. いくつかの言語での全角スペースの挙動
- 9. 文字数を算出するプログラムの実装
- 10. hash(基礎)keysとvalues
- 11. 3-13. 詳細ページを表示しよう
- 12. 3-12. ツイートを投稿しよう – index
- 13. 3-8. ツイートを投稿しよう – new
- 14. 管理者側ジャンル機能の作成の仕方
- 15. 【Rails】DB接続のないログイン画面でバリデーションする
- 16. fetchメソッドの基本
- 17. Ruby on railsインストール opensslでハマった話※Mac
- 18. if,else問題(演算子)
- 19. 【AWS】EC2インスタンスへのログイン
- 20. [Ruby 3.1]多重代入の評価順序変更について検証
IPAddrを利用せずにIPをvalidateする
##### 一番シンプルなコード
引数ipの値が0から始まったり、文字列の場合は`ti.to_i.to_s == ti`がうまく働く。“`
def is_valid_ip(ip)
target_ip = ip.split(‘.’)
target_ip.size == 4 && target_ip.all? {|ti| ti.to_i.to_s == ti && (0..255).include?(ti.to_i)}
end
“`##### たまに見るifに条件いっぱいのコード
たまにif文の中で条件を列挙しまくって、最後`return true`とかするのを見るがそういうい時は、booleanを判定できるメソッド使った方が戻り値をわざわざ書かないで済むから良いかも
“`
def is_valid_ip(ip)
target_ips = ip.split(‘.’)
return false if target_ips.count != 4
target_ips.each do |ti|
return false if ti.include?
each 入れ子
〜問題〜
配列内の果物と値段の合計額を出力せよ。![スクリーンショット 2022-11-25 1.42.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/c73add83-09c2-eeb0-dc6e-ea8350689534.png)
![スクリーンショット 2022-11-25 1.43.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/9939420f-0103-9b64-da89-69e6cead78bf.png)~解答~
![スクリーンショット 2022-11-25 1.44.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/b948c7e3-678e-1efe-bc1b-8702900130ee.png)
〜解説〜
each文を使用し、配列内の要素を順に取り出す
二重ハッシュ
〜問題〜
配列の内部に、
複数のユーザーの情報をハッシュとして持つ変数user_dataがあります。↓
![スクリーンショット 2022-11-23 16.29.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/32e90478-5af1-cefe-07cf-8b1cf2b5c938.png)
user_dataで、全ユーザーの名前だけが出力されるように
Rubyでコーディングしてください。
〜解答〜![スクリーンショット 2022-11-23 16.30.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/95066637-57dc-0aaa-214d-5008fa276fd0.png)
〜解説〜
ハッシュの取得は↓
ハッシュ[取得したい値のキー]その為
ハッシュ[:user][:profile][:name]
で名
値(3教科)の平均値を計算する。
〜問題〜
国語が80点、英語が50点、数学が70点の場合のテストの平均点を出力して下さい。
※条件 変数を使用すること
〜模範解答〜
![スクリーンショット 2022-11-23 16.09.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/2eba3611-7500-ff1b-df2a-30fc2868bb94.png)
~模範解説~
条件があるので、まずスコアを変数に代入する。
平均値も変数を用いる事で見やすくなります。変数を用いない場合
puts “3教科の平均点は、
#{(japanese_score + english_score + math_score) / 3}点です。”と見にくい表記になります。
【初心者向け】4パターンのバリデーションレベルについて学ぶ【Rails】
## 1. はじめに
初心者の場合だと、バリデーションは特に何も考えずにモデルで定義しているという人は結構いるのではないでしょうか。ただ業務で開発していたり、自主アプリの規模が大きくなってきたりすると、「モデルで定義する方法が最適解なのか?」という疑問が湧いてくる場面があると思います。私も業務で開発していて、この辺が気になり始めた1人です。せっかくなので今回バリデーションレベルについて調べて、あれこれ考えたことをこの記事に残しておこうと思います。同じような人の役に立てばと思います。
※以下はRailsの想定で話を進めています(考え方自体はフレームワークを超えて共通した内容かと思います)
## 2. 4パターンのバリデーションレベル
さて、そもそもバリデーションレベルは4パターンあります。それが以下の通り。① モデルレベル
② データベースレベル
③ コントローラレベル
④ フロントエンドレベル1つずつ詳しく見ていきます。
## 3. ①モデルレベル
#### メリット
* データベースに依存しない
-> バリデーションの仕組み(データベース制約等)がDBに依存するみ
indexメソッドを使って検索
任意の文字列に”code”が、左から何文字目に出てくるかを返し、その数を出力するメソッドを作りましょう。
出力例:
count_code(“codexxcode”) → 1
count_code(“aaacodebbb”) → 4
count_code(“cozexxcode”) → 7ヒント: indexメソッドを使用
# indexメソッドとは
文字列や配列の中に、指定した文字列が含まれていた場合、その文字列の開始位置を整数の値で返すメソッド。
“`ruby:例
str.index(検索したい文字列, [検索を開始する位置])
“`“`:解答
def count_code(str)
puts str.index(“code”, 0) + 1
endcount_code(“codexxcode”)
“`“`:ターミナル
1
“`+1を記述しなかった場合、ターミナルでは0が返ってきます。
文字列の先頭を0から数えた数字を返すため、 +1をしています。“`解答
def count_code(str)
puts (str.index(“
Rubyにおける3つの変数とは
## ローカル変数とは
– 使用できる範囲が、他のインスタンス変数やクラス変数と比較すると限られている
– メソッドやブロック(クラス内)で変数を定義した場合は、そのメソッドやブロック内のみで有効になる
– 定義自体はメソッドやブロックの外でもできる
## インスタンス変数とは
– 同じオブジェクト内で共有可能な変数のこと
## クラス変数とは
– 同じクラス内のすべてのインスタンスメソッド内や継承されたクラス内で使用できる変数のこと
– 変数名に@@をつけると使える## 参考記事
https://qiita.com/mary_new_programmer/items/4c4353c3d1df7242f515
いくつかの言語での全角スペースの挙動
## 最初に
言語によって、全角スペースが混入したときの挙動が違います。
各言語によって、どのような違いがあるのだろうかと思い、簡単に調べてみました。
### Python・Javaは、検知してエラー
全角スペースが混じってるだけで、それを検知しエラーとして教えてくれました。
– Python(3.8.2)は、`SyntaxError: invalid character in identifier`と表示。
– Java(openjdk 15)は、`error: illegal character: ‘\u3000’`と表示。Javaは文字コードまで教えてくれるので、親切ですね。
### Rubyは、変数名に扱えてしまう
Rubyでは、日本語も変数名に使うことができ、全角スペースも変数名に使えてしまいます。
“`fullwidth_space.ruby
= “Hello, world!”
p # “Hello, world!”
“`上記のコードは、全角スペースに文字列を代入して出力してます。
そういうわけで、もし全角スペースが混じってもそれを検知
文字数を算出するプログラムの実装
count_hiメソッドを実装。
– 対象となる文字列の中から、”hi”という特定の文字列の数を取得すること
– 上記で取得した数を出力すること“`ruby:雛形
def count_hi(str)
# 処理を記述
end# 呼び出し例(引数には対象となる文字列を指定します)
count_hi(‘abc hi ho’)
“`
“`ruby:出力例
count_hi(‘abc hi ho’) → 1
count_hi(‘ABChi hi’) → 2
count_hi(‘hihi’) → 2
“`
# scanメソッド
scanメソッドは、対象の要素から引数で指定した文字列を数え、配列として返すメソッドです。
“`ruby:例
1 “foobarbazfoobarbaz”.scan(“ba”)
2 => [“ba”, “ba”, “ba”, “ba”]
“`“hi”という文字列がいくつあるか数えて、それを返すよう記述していきます。
“`ruby:回答(途中)
def count_hi(str)
puts str.scan(“hi”)
end# 呼
hash(基礎)keysとvalues
![スクリーンショット 2022-11-23 15.51.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/2a4b04b6-c333-4395-7c2e-b79cf26bdad4.png)
hashとは、複数のデータを管理する事ができ、
データをバリュー。名前をキーと呼ぶ。ハッシュの宣言
![スクリーンショット 2022-11-23 15.46.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/42a0492f-e946-321d-0b54-5667be8a0b9c.png)問題
以下のように出力したい時はどのようにハッシュを設定すれが良いか。
![スクリーンショット 2022-11-23 15.49.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/9df8ccea-8a1
3-13. 詳細ページを表示しよう
# 今回の学習
3-1. ターミナル(コマンドプロンプト)の使い方
3-2. Ruby on Rails について
3-3. データベースの構造を理解しよう
3-4. MVCの基本を学ぼう
3-5. ページ遷移を実装しよう
3-6. Railsの構成について
3-7. モデルとマイグレーションについて
3-8. 投稿ページを表示しよう
3-9. ツイートを投稿しよう
3-10. 投稿機能おさらい前編 -投稿ページにフォームを表示する
3-11. 投稿機能解説おさらい後編 -フォームから送信された情報を保存する
3-12. 一覧ページを表示しよう
3-13. 詳細ページを表示しよう
3-14. ツイートを編集しよう
3-15. ツイートを削除しよう# はじめに
今回はツイートの詳細ページを作ります。
一覧ページに並んでいるツイートをクリックすると、そのツイートに関する詳細が見られるページというイメージです。
3-12. ツイートを投稿しよう – index
# 今回の学習
3-1. ターミナル(コマンドプロンプト)の使い方
3-2. Ruby on Rails について
3-3. データベースの構造を理解しよう
3-4. MVCの基本を学ぼう
3-5. ページ遷移を実装しよう
3-6. Railsの構成について
3-7. モデルとマイグレーションについて
3-8. 投稿ページを表示しよう
3-9. ツイートを投稿しよう
3-10. 投稿機能おさらい前編 -投稿ページにフォームを表示する
3-11. 投稿機能解説おさらい後編 -フォームから送信された情報を保存する
3-12. 一覧ページを表示しよう
3-13. 詳細ページを表示しよう
3-14. ツイートを編集しよう
3-15. ツイートを削除しよう# GOAL
– tweetした内容の一覧を表示する# ▼▼▼実装&解説動画
3-8. ツイートを投稿しよう – new
# 今回の学習
3-1. ターミナル(コマンドプロンプト)の使い方
3-2. Ruby on Rails について
3-3. データベースの構造を理解しよう
3-4. MVCの基本を学ぼう
3-5. ページ遷移を実装しよう
3-6. Railsの構成について
3-7. モデルとマイグレーションについて
3-8. 投稿ページを表示しよう
3-9. ツイートを投稿しよう
3-10. 投稿機能おさらい前編 -投稿ページにフォームを表示する
3-11. 投稿機能解説おさらい後編 -フォームから送信された情報を保存する
3-12. 一覧ページを表示しよう
3-13. 詳細ページを表示しよう
3-14. ツイートを編集しよう
3-15. ツイートを削除しよう# はじめに
今回は投稿フォームを作ります。
※ 3-4の末尾にある、『復習問題』を終わらせている前提で進めています。
やっていないと途中でエラーが出てしまうので、必ずやっておきましょう。# 概要
管理者側ジャンル機能の作成の仕方
## ジャンル機能について
今回はジャンル機能について記述していきたいと思います。
前提として今回は顧客と管理者側に分けており、管理者側の方にジャンル作成していきます。
※adminは管理者の事です。## ジャンルのモデル作成
“`
$ rails g model Genre
“`
のコマンドを打ち込み作成します。その後にマイグレーションファイルを開きカラムを追加。
“`db/migrate/_create_genres.rb
class CreateGenres < ActiveRecord::Migration[6.1] def change create_table :genres do |t| t.string :name t.timestamps end end end ``` t.string :nameを追加してあげましょう。 nameは今回ジャンルに追加する名前の事です。 ``` $ rails db:migrate ``` 忘れずにrails db:migrateをしたら下準備は完了です。 ##
【Rails】DB接続のないログイン画面でバリデーションする
## はじめに
バリデーションは,ActiveRecordの機能として実装できますが,ActiveRecordはORMのフレームワークであるため,DB接続が必要になります.
そのため,DB接続しないモデルにはActiveRecordが使えません.
今回はActiveModelを用いて,DB接続しないモデルへバリデーションを実装する方法を整理しました.Rails初学者による記事になります.
不足,間違い等ありましたらご指摘いただけますと幸いです.## 環境
Ruby 3.0.4
Rails 6.1.7## やりたいこと
DBに接続しないsessionモデルで作成したログイン画面に,バリデーションを実装します.## 実装方針
1. sessionモデルに,`ActiveModel::Model`をミックスインすることで,バリデーション機能を有効にする.
1. sessionsコントローラで,`valid?`メソッドを用いて,バリデーションをトリガする.
1. sessionsビューのnewファイルで,エラーメッセージを出力する.## Modelでバリデーション機能を実装
fetchメソッドの基本
## `fetch`メソッドとはなんぞや
最近よく見かける`fetch`メソッドは、ハッシュのキーを指定して、そのキーに関連する値を取得することができるメソッドです。
ハッシュの中にあるオブジェクトに対して使うことができます。
## 使い方
具体的な使用方法を説明します。
### 使用例
“`rb
goriras = {“gorira1” => 100, “gorira2” => 200, “gorira3” => 300}
puts goriras.fetch(“gorira1”)
100
“`
`goriras`という名前のハッシュオブジェクトがあるとします。
上の例では、`gorira1`というキーが指定されています。
このようにすると、キー`gorira1`の値`100`を取得できます。
Ruby on railsインストール opensslでハマった話※Mac
## 1.rbenvインストール
“`
brew install rbenv
“`
“`
rbenv install 3.1.2
“`
テスト用フォルダ作成
“`
mkdir ~/ruby-test
cd ~/ruby-test
“`
テストフォルダへruby反映
“`
rbenv local 3.1.2
rbenv rehash
“`
反映確認
“`
ruby -v
“`rails インストール※bundlerはインストール済み
“`
gem install rails
“`
しかし、、
“`
ERROR: While executing gem … (Gem::Exception)
OpenSSL is not available. Install OpenSSL and rebuild Ruby (preferred) or use non-HTTPS sources
“`
opensslが利用できないとのことなので
“`
brew link openssl –force
“`
しかし、
“`
Warning: Refus
if,else問題(演算子)
police_troubleメソッドを実装。
あなたは警官です。
aとb二人の容疑者の取り調べをしています。このとき、次のルールで証言の真偽判定を行います。
※問題文で登場したaとb二人の容疑者は、今回実装するpolice_troubleメソッドの引数として取り扱っていきます。– 第一引数aと第二引数bどちらの証言も真(true)であれば、Trueを出力すること
– 第一引数aと第二引数bどちらの証言も偽(false)であれば、Trueを出力すること
– 第一引数aと第二引数bで証言の真偽が一致しない場合であれば、Falseを出力すること“`ruby:雛形
def police_trouble(a, b)
# ここに条件式を記述する
end# 呼び出し例
police_trouble(true, true)
police_trouble(false, false)
police_trouble(true, false)“`
“`ruby:出力例
police_trouble(true, true) → True
police_trouble(false,
【AWS】EC2インスタンスへのログイン
# はじめに
rails初学者の者です。オンラインでプログラミングを学習させて頂いてるのですが、さらに理解を深めていきたいと思い、学習したことを備忘録として、残して理解を深めていきたいと思います。
また、間違った点など、ありましたら、ご指摘いただけると幸いです。よろしくお願いします。# EC2インスタンスへログイン
EC2インスタンスを作成すると、「ec2-user」というユーザーと対応するssh秘密鍵が生成されます。「ec2-user」を使用してログインします。“`bash.ターミナル(ローカル)
% cd ~
“`
“`bash.ターミナル(ローカル)
% mkdir ~/.ssh# .sshというディレクトリを作成
# File existsとエラーが表示されたとしても、.sshディレクトリは存在しているのということなので、そのまま進みましょう。
“`
“`bash.ターミナル(ローカル)
% mv Downloads/ダウンロードした鍵の名前.pem .ssh/# mvコマンドで、ダウンロードしたpemファイルを、ダウンロードディレクトリから、.ss
[Ruby 3.1]多重代入の評価順序変更について検証
# あらすじ
Ruby3.1のバージョンアップ作業に伴い多重代入の評価順序変更について影響箇所を調査する必要が出ました。
この記事では、3.0以前から3.1にアップデートしたときに具体的に何が変わったかを検証しました。# 多重代入の評価順序変更とは?
以下のような多重代入について、
“`ruby
foo[0], bar.baz = a, b
“`Ruby 3.0 以前では右辺=>左辺の順序で評価されてましたが、
3.1 からは **左辺=>右辺** の評価順に変更されました。( [リリースノート参照](https://www.ruby-lang.org/ja/news/2021/12/25/ruby-3-1-0-released/) )# 検証内容
3.0 と 3.1 で同じコードを試してみて puts で実行順序を検証します。
## 検証1:左辺と右辺どちらが先に呼び出されるか確認
コード:
“`ruby:a.rb
def a=_
@hoge ||= ‘first called a=’
end
def x
@hoge ||= ‘first ca