- 1. Ruby include?メソッドを使ってプログラムを作成する
- 2. AbstractController::DoubleRenderError
- 3. 【Rails】たくさんあるprimary_keyとforeign_keyの設定について、それぞれの役割を理解する
- 4. 【Ruby on Rails】enum の日本語化は gem なしで実現できる
- 5. Ruby even?メソッド
- 6. Turbo Drive とは? Turbo Rails Tutorial をやってみた(3章)
- 7. Rackの脆弱性対応を! (CVE-2022-44570,CVE-2022-44571,CVE-2022-44572)
- 8. ②ストロングパラメーターについて
- 9. 【Railsアプリケーション】Heroku、AWS S3、Active Storageの設定
- 10. 【Railsアプリケーション】Herokuへデプロイして本番稼働する
- 11. ジェネレータの設定
- 12. Rails apiモードでjsonではなく文字列を返す方法
- 13. 日付や数値のフォーマット
- 14. [軽量化] マルチステージビルドによるrails環境のdocker化
- 15. Ruby if, elseを使ったプログラムの作成
- 16. [Rails]コントローラ、ルーティング、ビュー、モデルの記述ルール
- 17. 【Ruby on Rails】Dockerからコンソールを起動させる方法
- 18. 【rails】seedやコンソールを使わず環境変数で管理者権限を実装する。(脳筋)
- 19. [Rails]アプリケーション作成、サーバー立ち上げる
- 20. 【個人開発】駆け出しエンジニアのポートフォリオ作りを手助けするサービスを作りました
Ruby include?メソッドを使ってプログラムを作成する
# include?メソッド
include?メソッドについては以前の投稿で書きました。https://qiita.com/ta–i/items/3a7004d890bccf7ad2c1
今回include?メソッドをもう一度調べているときに、大文字小文字を区別せずに検索する方法があることを知りました。
例:大文字小文字を区別せずに検索する
“`ruby
string = “Hello World”
puts string.downcase.include?(“hello world”)
“`
“`ruby
true
# ターミナル出力
“`
downcaseメソッドは、大文字を小文字に変換します。
今回は小文字に変換して、(“hello world”)を検索したという流れです。# include?メソッドを使って、特定の数字が含まれているかをチェックするプログラムを作成
下記条件です。
– 条件1:配列内に1,2,3が全て入っている場合は、「True」と出力すること
– 条件2:配列内に1,2,3の全てが入っていない場合は、「False」と出力すること`
AbstractController::DoubleRenderError
# はじめに
フリマアプリを実装中のエラーです。
ログイン状態、ログアウト状態で遷移できるページを変更したい実装中に
`AbstractController::DoubleRenderError`のデバックを記載しています。
URLは直打ちで入力する事とします!実装したいこと
* ログイン状態でも自身が出品していない編集ページへ遷移しようとするとトップページに遷移する。
* ログアウト状態で商品編集ページに遷移しようとするとログインページに遷移する。以上の2点を実装しようとしています。
# エラーまでの経緯 ~コード紹介~
~~~ruby items_controller.rb
def edit
redirect_to new_user_session_path unless user_signed_in?
if current_user.id != @item.user_id
redirect_to root_path
end
end
~~~以上の実装で
~~~
AbstractController::DoubleRenderErr
【Rails】たくさんあるprimary_keyとforeign_keyの設定について、それぞれの役割を理解する
## はじめに
Railsで主キーや外部キーを指定する際、`primary_key`や`foreign_key`をモデルに設定します。
“`モデル例.rb
class Office < ApplicationRecord self.primary_key = :company_cd has_many :users, primary_key: :office_cd, foreign_key: :company_cd end class User < ApplicationRecord belongs_to :office, primary_key: :office_cd, foreign_key: :company_cd end ``` 上記の例では合計5箇所に`primary_key`と`foreign_key`を書いていますが、一つ一つの設定の役割はなんなのでしょうか。 これらの設定は、いろんな記事でいろんな書き方や説明がされていますが、一つ一つを説明しているものはありませんでした。 また、検索上位にくるような記事でも説明が間違っていることが多く、結構混乱するポイント
【Ruby on Rails】enum の日本語化は gem なしで実現できる
# はじめに
こんにちは、 [FarStep](https://twitter.com/8SKeEdvtHfOcczY) です。
Rails でアプリケーションを作成していると enum の値を日本語化する場面があると思います。
そんなとき [enum_help](https://github.com/zmbacker/enum_help) を導入していませんか?もちろん enum_help を用いた enum の日本語化も間違った実装ではありません。
しかし、アプリケーションにインストールする gem は少ないに越したことはありません。
なぜなら、– gem が多いとアプリケーションの保守が大変になる(Rails との依存関係等)
– gem はメンテナンスがいつ終わるか分からないといった理由があるからです。
そこで本記事では **gem を使わずに** enum の値を日本語化する方法を紹介します。
それでは、始めましょう ?# 環境
最初に、動作確認を行う環境について説明します。
Ruby と Ruby on Rails のバージョンは下記の通りです。
Ruby even?メソッド
# even?メソッド
対象の数値が「偶数」かどうかを判断するメソッド。
対象の要素の値が偶数であれば真を返し、そうでない場合は偽を返します。
これはRubyが元々用意しているメソッドです。下記URLはeven?メソッドの公式リファレンスです。
https://docs.ruby-lang.org/ja/latest/method/Integer/i/even=3f.html例1
“`ruby
puts 10.even?
“`
“`ruby
true
# ターミナルの返し
“`
例2
“`ruby
puts 5.even?
“`
“`ruby
false
# ターミナルの返し
“`# even?メソッドを使って偶数血の取得をするプログラムを作成します
配列にある値の中から偶数の数をカウントして出力するメソッドを作ります。出力例:
“`ruby
count_evens([2, 1, 2, 3, 4]) → 3
count_evens([2, 2, 0]) → 3
count_evens([1, 3, 5]) → 0
“`“`ruby
def c
Turbo Drive とは? Turbo Rails Tutorial をやってみた(3章)
本記事は、?「Turbo Rails Tutorial」の学習を進めていく際の個人メモです!
https://www.hotrails.dev/turbo-rails
? 前章の記事はこちら
https://qiita.com/yuppymam/items/ba18149d2a1afcc64556
# 3章 [Turbo Drive](https://www.hotrails.dev/turbo-rails/turbo-drive)
3章は「Turbo Drive とは何か」を理解するため、ちょっとした実験をしながら説明してくれる章となっています。
## Turbo Drive とは?
Rails7ではデフォルトで Turbo Drive が有効になっています。“`ruby: Gemfile
gem “turbo-rails”
“`“`js: app/javascript/application.js
import “@hotwired/turbo-rails”
import “./controllers”
“`
1章の時点で、すでに SPA チックになって
Rackの脆弱性対応を! (CVE-2022-44570,CVE-2022-44571,CVE-2022-44572)
2023年1月18日にRuby on Railsの脆弱性[^1]とは別にRackの脆弱性が公表されました。
https://discuss.rubyonrails.org/t/cve-2022-44570-possible-denial-of-service-vulnerability-in-racks-range-header-parsing/82125
https://discuss.rubyonrails.org/t/cve-2022-44571-possible-denial-of-service-vulnerability-in-rack-content-disposition-parsing/82126
https://discuss.rubyonrails.org/t/cve-2022-44572-possible-denial-of-service-vulnerability-in-racks-rfc2183-boundary-parsing/82124
どれもReDoSの問題であり、CVE-2022-44571とCVE-2022-44572は以下の特徴により危
②ストロングパラメーターについて
本日はストロングパラメーターについて投稿します。
○ストロングパラメーターとは
—Ruby on rilsのアプリケーションにおいて不正なデータを取得しないように指定する
アプリ内の警備員みたいなもの。(例えが間違っていたらすいません。。):sweat_smile:ストロングパラメーターを使う為には2つのメソッドを使用します。
①require(リクワイア)メソッド
—送信されたパラメーターの情報を持つparamsが使用出来るメソッドの事。
パラメーターからどの情報を取得するか選択する事が出来る。
使い方
““`
paras.require(:モデル名)
““`さらに指定したパラーメーターをより限定した時に使うのがpermitメソッドです。
②parmitメソッド
—requieメソッドと同じでparamsが使用出来るメソッド。
取得したいキーを指定出来て、その中の値のセットのみ取得出来る。
使い方
““`
params.require(:モデル名).parmit(キー名)
““`まだ僕自身ざっくりな理解ですが日々アウト
【Railsアプリケーション】Heroku、AWS S3、Active Storageの設定
# はじめに
Railsなどを中心に勉強中のエンジニア初心者が他の記事を参考にしたり、実際に実装してみたりして、アウトプットの一環としてまとめたものです。
間違っていることもあると思われるので、その際は指摘いただけると幸いです。# Heroku上でアプリケーションを稼働させる
Railsアプリケーションでアップロードした画像がAWS S3に保存されるように設定し、そのアプリケーションをHeroku上で本番稼働させる想定で記載する。
`Active Storage`の実行環境、AWSのアカウント情報、およびS3のバケット作成などは済んでいる前提で記載する。
# `storage.yml`の編集
設定ファイルにAWSのアカウント情報および、S3のバケット情報を記載する。
### ※AWSのアカウント情報やS3のバケット情報などについては、セキュリティ的な観点から環境変数に持たせて読み込むようにする。
### `config/storage.yml`
“`yaml
# Use rails credentials:edit to set the AWS secrets (
【Railsアプリケーション】Herokuへデプロイして本番稼働する
# はじめに
Railsなどを中心に勉強中のエンジニア初心者が他の記事を参考にしたり、実際に実装してみたりして、アウトプットの一環としてまとめたものです。
間違っていることもあると思われるので、その際は指摘いただけると幸いです。# RilasアプリケーションをHeroku環境で本番稼働する
下記の前提とする。
– `Heroku CLI`の実行環境があり、`Heroku`上にリポジトリがある
– AWS CLIの設定が完了している# Heroku上のリポジトリ情報を確認する
### `Heroku`上のリポジトリ情報を確認する
“`bash
heroku info -a Heroku上のアプリケーション名
“`### 実行結果
“`bash
% heroku info -a rails-app
=== rails-app
Auto Cert Mgmt: false
Collaborators: rails-app@gmail.com
Dynos:
Git URL: https://git.heroku.com/rails
ジェネレータの設定
# ジェネレータ設定について
> ソースコードの雛形を生成するジェネレータという機能があります。
> 自動的にコントローラやビューファイルを生成してくれるのですが、自動的に生成しない様に設定を行います。
“` config/application.rb
module TaskApp
class Application < Rails::Application config.load_defaults 6.0 config.generators do |g| g.skip_routes true #routes.rbの変更されず g.helper false #ヘルパーファイルの生成せず g.assets false #css,JavaScriptファイル生成せず g.test_framework :rspec #testファイル生成せず g.controller_specs false #specs_controller生成せず
Rails apiモードでjsonではなく文字列を返す方法
Rails apiモードで、jsonではなく文字列(string)を返却したい時の方法について記載する。
あまり使わない方法だと思うが、
先日token(string)のみを返すエンドポイントを作成する必要があり、
方法がわからず困ったのでメモ的に残す。# 返したい値
今回やりたいイメージ。returnを使うわけではないがイメージとしてわかりやすいので。
“`ruby:string(ただの文字列)
return token
“`通常だとこういう形式になる。
“`ruby:json(普通はこの形式で値を返す)
return { “token” : “token” }
“`# 方法
renderメソッドで `:json => “文字列”` とする
“`ruby:controller.rb
render :json => ‘This is the string’
“`
日付や数値のフォーマット
# はじめに
Railsなどを中心に勉強中のエンジニア初心者が他の記事を参考にしたり、実際に実装してみたりして、アウトプットの一環としてまとめたものです。
間違っていることもあると思われるので、その際は指摘いただけると幸いです。# フォーマット指定による変換
日付や時刻、数値を書式を指定して文字列にする場合の記述方法について解説。
(Rubyの`Date`や`DateTime`などの日付型の値や、`Integer`、`Float`などの数値をフォーマット指定で文字列に変換する記述方法について)
# 日付のフォーマット
Rubyで日付型をフォーマット指定で文字列に変換するときは、`strftime`メソッドを使用する。
`strftime`メソッドは日付を扱う`Date`クラス、時間を扱う`Time`クラス、日時を扱う`DateTime`クラス全てに適用できる。
### `strftime`メソッド構文
“`ruby
Date.strftime([“format文字列”])
Time.strftime([“format文字列”])
DateTime.strftime
[軽量化] マルチステージビルドによるrails環境のdocker化
## rails環境のdocker化
rails環境のdocker化についてまとめます。
dockerの軽量化のためにマルチステージビルドで環境を構築します。### 各種バージョン
– rails 6.0.6.1
– ruby 3.0.2
– node 15.0.1
– postgresql 14.6-alpine### Dockerfileの作成
リポジトリに `dockerfile` を作成。`apt-get install` を使用せずに下記のようにマルチステージビルドでnodeをインストールすることで、dockerの軽量化およびbuildの時間短縮が期待できます。“` docker
FROM node:15.0.1
FROM ruby:3.0.2COPY –from=node /opt/yarn-* /opt/yarn
COPY –from=node /usr/local/bin/node /usr/local/bin/
COPY –from=node /usr/local/lib/node_modules/ /usr/local/lib/node
Ruby if, elseを使ったプログラムの作成
# if, elseを使ってプログラムを作成します
条件は以下の通りです。
– 条件1:第一引数にオウムが鳴く場合はtrueを指定し、鳴かないfalseを指定する
– 条件2:第二引数には時間を指定する(ただし、「分」は考えないものとする)
– 条件3:20時から翌朝7時までの間にオウムが鳴いた場合は「NG」と出力する(20時と7時は含まれない)
– 条件4:上記以外の場合は「OK」と出力する“`ruby
def parrot_trouble(talking, hour)
if talking && (hour < 7 || hour > 20)
puts “NG”
else
puts “OK”
end
end# 呼び出し例
parrot_trouble(true, 6)
“`“`ruby
NG
# ターミナル出力
“`## 解説
オウムが鳴いている時間帯が20時〜7時 → NG
上記以外の場合にはOKを出力されるように記述を考えていきます。– 第一引数”talking”について
オウムが鳴いているか・鳴いていないかの真偽判定
[Rails]コントローラ、ルーティング、ビュー、モデルの記述ルール
## はじめに
コントローラ、ルーティング、ビュー、モデルを作る際のルールをざっくりまとめてみようと思う## コントローラでの命名規則
– コントローラ名は全て複数形かつ全て小文字
– Railsはコントローラ作成と同時に、必要なviewファイルの作成や記述の追加ができる
“`rb
$ rails g controller コントローラ名 アクション名
“`## ルーティングのルール(基本編)
“`rb
HTTPメソッド ‘URL’ => ‘コントローラ#アクション’
“`
URLと’コントローラ名#アクション名’の形が同じ場合は省略可能↓
“`rb
get ‘homes/top’
“`#### 代表的なHTTPメソッド
– GET(リソースの取得、画面表示)
– POST(リソースの更新、リソースへのデータ追加 など)
– DELETE(リソースの削除)## ビューでの命名規則
– ビューファイルの名前は、アクション名と同じ名前にする## モデルでの命名規則
– モデル名 → 先頭は英大文字/単数形
– モデルのファイル名 → 先頭は英小文字/単数形
【Ruby on Rails】Dockerからコンソールを起動させる方法
# 背景
Dockerを用いたチーム開発でターミナルから直接`rails c`を実行してもコンソールを起動できない。
“` :コンソール
$ rails c
=>
Rails is not currently installed on this system. To get the latest version, simply type:$ sudo gem install rails
You can then rerun your “rails” command.
“`# 方法
下記の順番で実行する。
“` :コンソール
$ Docker compose up -d
$ Docker compose run –rm api bash
bash-5.1# rails c
“`
`$ Docker compose up -d`
まず作成したコンテナを起動する。
`$ Docker compose run –rm api bash`
apiサービスを開始し、サービス内でbashとしてコマンドを実行する。# 参考
https://docs.do
【rails】seedやコンソールを使わず環境変数で管理者権限を実装する。(脳筋)
# 経緯
管理者権限機能を実装する際に管理者ユーザーをseed.rbに初期レコードとして入れる手法を使っていたのですが、[Fly.io]( https://fly.io/ “Fly.io”)の無料プランでリリースしようとすると、、、、、
まさかの本番環境のコンソールを開くことが出来ない事態。。。。。という事で管理者権限ぽいのを環境変数を使って実装しよかなという次第です。
# 前提
`gem device`と`gem dotenv-rails`を導入済み投稿用のコントローラーとして`posts_controller.rb`
投稿用のモデルとして`Postモデル`を使用しています。# この記事での想定している状況
管理者ユーザーのみ投稿編集削除できる。
管理者以外のユーザーは各投稿の閲覧のみ。# 実装
.envファイルの記述
コントローラーの記述
viewファイルの記述## ①.envファイルの記述
“`:.env
~省略~
ADMIN_EMAIL=管理者ユーザーのemailアドレス
例)ADMIN_EMAIL=adminuser@gmail.com
“`
`A
[Rails]アプリケーション作成、サーバー立ち上げる
## はじめに
Ruby on Railsで新規アプリケーションを作成して表示してみる## Railsの雛形を作成する
– 新規で作成する際は↓
(アプリケーションの基本形が作成される)“`rb
username:~/environment $ rails new アプリケーション名
“`
– アプリケーションを削除する際は↓
(ファイルやフォルダを削除するコマンド)“`rb
username:~/environment $ rm -rf アプリケーション名
“`## サーバーを立ち上げる流れ
– 最初に自分のアプリケーションに移動する
cdコマンドで移動↓“`rb
username:~/environment $ cd アプリケーション名
“`
移動してパス表記が変わるのを確認↓
“`rb
username:~/environment/アプリケーション名 $
“`– サーバーを立ち上げる
$ rails s の ”s” は”server”の略↓“`rb
username:~/environment $ rails s
“`
【個人開発】駆け出しエンジニアのポートフォリオ作りを手助けするサービスを作りました
# はじめに
**駆け出しエンジニアのみなさん、ポートフォリオ作りに悩んでいませんか??**
アイデア出しからサービス設計、技術選定にデザイン・実装、さらには運用などなど…
個人開発(ポートフォリオ作り)にはこのように乗り越えるべき壁がいくつも存在していて、それなりのものをちゃんと作ろうとするとかなり大変です。
**特に初めてポートフォリオを作るような駆け出しエンジニアの場合、最初のアイデア出しの段階で挫折してしまう人も少なからずいるでしょう。**
(何を隠そう、かつての自分もそうでした。)
**一方で、そんな個人開発に悩める人たちを救うべく世の中には先人たちが残した素晴らしい技術記事がたくさん存在しています。**
例えば
– [【個人開発・ポートフォリオに】無料で簡単にいい感じのデザインにできるサービスまとめ](https://qiita.com/aiandrox/items/4196c8f5b564d29fdce7)
– [ポートフォリオや個人開発で使えそうなアイデア](https://qiita.com/MasatoraAtarashi/items/ee