- 1. これから
- 2. hidden_fieldでパラメータを送信する
- 3. 【議事録】AWS(EC2)へデプロイしたアプリをSSL化し、セキュリティを担保する手順(Let’s Encryptを使用)(ALBは使わない)
- 4. 【rubocop-airbnb】指摘箇所について
- 5. 【Rails】本番環境構築で Missing service adapter for “GCS” と怒られる
- 6. 【Rails】Deviseをカスタマイズして使いたい!!(ルーティング編)
- 7. 【Rails】Deviseをカスタマイズして使いたい!! (導入〜モデル編)
- 8. Ruby include?メソッドを使ってプログラムを作成する
- 9. AbstractController::DoubleRenderError
- 10. 【Rails】たくさんあるprimary_keyとforeign_keyの設定について、それぞれの役割を理解する
- 11. 【Ruby on Rails】enum の日本語化は gem なしで実現できる
- 12. Ruby even?メソッド
- 13. Turbo Drive とは? Turbo Rails Tutorial をやってみた(3章)
- 14. Rackの脆弱性対応を! (CVE-2022-44570,CVE-2022-44571,CVE-2022-44572)
- 15. ②ストロングパラメーターについて
- 16. 【Railsアプリケーション】Heroku、AWS S3、Active Storageの設定
- 17. 【Railsアプリケーション】Herokuへデプロイして本番稼働する
- 18. ジェネレータの設定
- 19. Rails apiモードでjsonではなく文字列を返す方法
- 20. 日付や数値のフォーマット
これから
改めて知識をアウトプットさせていきます。よろしくお願いします。
hidden_fieldでパラメータを送信する
# はじめに
Railsなどを中心に勉強中のエンジニア初心者が他の記事を参考にしたり、実際に実装してみたりして、アウトプットの一環としてまとめたものです。
間違っていることもあると思われるので、その際は指摘いただけると幸いです。# ユーザーからは見えないようにパラメータを送信する
ユーザーが入力フォームから入力したデータ以外にも、パラメータをコントローラへ送信したい場合には`hidden_field`を使用する。
例えば、`Room`詳細ページで予約処理を実行する場合、ユーザーが入力する予約情報以外に`room_id`などを送信したい場合などがある。
ユーザーに見えなくても良い情報は見えない方が望ましい、かつ、万が一編集されるとシステムエラーなどが起こる可能性もあるため、`hidden_field`を使用してユーザーには非表示の状態でアプリケーション側で値を設定して送信するとよい。
### 基本形(第一引数にパラメータ名(シンボル)、第二引数部分にvalueとして値を受け渡す)
“`ruby
<%= f.hidden_field :パラメータ名, :value => 値
【議事録】AWS(EC2)へデプロイしたアプリをSSL化し、セキュリティを担保する手順(Let’s Encryptを使用)(ALBは使わない)
# はじめに
– 本記事は、議事録としてまとめたものになります。
– 他の方の参考になる可能性も踏まえて、一般公開も行なっております。
– また記載内容はすべて、正しい内容が記載されているとは限りません。
– 誤った内容を見つけた場合は、ご指摘をお願いいたします。# この記事は誰向けの記事か?
– AWS(EC2)で稼働させているアプリをSSL化したい人
– TechCampのポートフォリオ作成で、SSL化したいが困っている人
– 費用を抑えつつ、SSL化したい人
– AWS(ALB)を用いず、SSL化したい人(ALBは稼働に相当費用がかかるため、Let’s Encryptを用いたい人)# 背景
– 自分のアプリ(ポートフォリオ)を、SSL化したいと思ったことがきっかけで実装することになった。
– TechCampへ参加し、オリジナルアプリを、Herokuにデプロイしていたが、その有料化に伴い、RenderやAWSを使うことになった。
– AWS(EC2)にアプリをデプロイしたが、通信プロトコルがHTTPSではなく、HTTPがデフォルトだった。
– プロトコルがHTTPだった場
【rubocop-airbnb】指摘箇所について
# はじめに
Railsなどを中心に勉強中のエンジニア初心者が他の記事を参考にしたり、実際に実装してみたりして、アウトプットの一環としてまとめたものです。
間違っていることもあると思われるので、その際は指摘いただけると幸いです。# rubocop-airbnbによるスキャンを実行する
### 実行コマンド
“`bash
bundle exec rubocop –require rubocop-airbnb
“`### 実行結果
“`ruby
Inspecting 15 files
…………..COffenses:
spec/spec_helper.rb:49:1: C: Style/BlockComments: Do not use block comments.
=begin …
^^^^^^15 files inspected, 1 offense detected, 1 offense auto-correctable
“`### 実行結果の確認
下記の通り、15ファイルをスキャンして、1つの修正箇所を指摘している。
【Rails】本番環境構築で Missing service adapter for “GCS” と怒られる
# 【Rails】本番環境構築で Missing service adapter for “GCS” と怒られる
## 状況
### my 環境
・Rails 7
・active_storage 採用
・本番だけ GCS 使おうとしている
・render.com へデプロイしてる###
production.rb で下記の指定をしていて、
“`
…
config.active_storage.service = :google
…
“`storage.yml で下記の指定をしている。
“`
google:
service: GCS
project: <%= ENV['GCS_PROJECT_NAME'] %>
credentials: <%= ENV['GCS_KEYFILE'] %>
bucket: <%= ENV['GCS_BUCKET'] %>
“``service: GCS` で GCS を service adapter として使おうとしているけど、それが存在しない
### エラーログ
“`
Feb
【Rails】Deviseをカスタマイズして使いたい!!(ルーティング編)
# どうした?
前回の記事では、Deviseを導入しUserモデルを作成しました。
https://qiita.com/ysk91_engineer/items/108e8d451aa33333e248
今回の記事では、
* ルーティングを設定し、URLとパスをカスタマイズ
* コントローラファイルを作成し、アクションを設定
* ビューファイルを用意し、ページにアクセスするを目標に進めていきます。
# 今回目指すもの
前回作成したUserモデルに対して、以下の処理をするためのルーティングを作成していきます。
**registrations_controller**
| HTTPリクエスト | パス | URL | アクション | 処理内容 |
|:-: |:-: |:-: |:-: |:-:|
| get | new_user | sign_up | new
【Rails】Deviseをカスタマイズして使いたい!! (導入〜モデル編)
# どうした?
Railsでアプリを作る際、ユーザー認証に便利なのがDevise gemです。
ただこのDevise、何でもかんでも言いなりに使用するとブラックボックス化してしまいます。
メソッドのようなおいしいところだけ使わさせて頂き、基本的な設計は自分の手でおこなうためにチャレンジしてみました。:::note
Deviseを使う前に、Railsチュートリアル等で勉強して自分でユーザー認証できるようにしましょう。
Deviseも[そう言ってます](https://github.com/heartcombo/devise#starting-with-rails)。
:::# 今回目指すもの
今回目指すのは、以下のようなUserモデルです。| カラム | 物理名 | 型 | 条件 |
|:-: |:-: |:-: |:-:|
| id | id | integer | |
| 名前 | name | string | 入力: 必須, 最大文字数: 50 |
| Eメール |
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