- 1. 環境
- 2. 目的
- 3. 注意
- 3.0.3. enumの使用方法
- 3.0.4. RailsみたいなRustフレームワーク「Loco」でWebAPIを爆速で立ち上げよう!
- 3.0.5. docker上のrails7でwhenever
- 3.0.6. routes.rbのルーティングの設定を確認するには
- 3.0.7. クレジットカード決済の導入
- 3.0.8. lambyを使ってみる
- 3.0.9. 【Rails】ActiveRecordでSQLっぽくテーブル結合する方法
- 3.0.10. Railsでデータを効率的にカウントする方法
- 3.0.11. 【Next.js × Rails】チーム開発 Twtichクリップのプレイリスト作成アプリ
- 3.0.12. 【Ruby,Rails】クラスメソッドとインスタンスメソッドの違い
- 3.0.13. 商品購入機能 単体テストコードの実装
- 3.0.14. Formオブジェクト
- 3.0.15. 【Rails】form_tagとは
- 3.0.16. 【Rails】Strong Parametersとは
- 3.0.17. 【Rails】パスワードのハッシュ化
- 3.0.18. 【Rails】before_actionとは
- 3.0.19. 【Rails】getとpostの違い
- 3.0.20. 【Rails】ロギングとは
rails環境新規構築(importmap + bootstrap)
# はじめに
rails の新規構築って、初回しか利用しないので利用頻度が低く、rails7から色々な組み合わせもできるようになったので、少し調査した結果を備忘録として残します# 準備
初期ファイルの生成
“`sh:コマンド
touch compose.yml
mkdir app
touch app/Dockerfile.dev
touch app/Gemfile
touch app/Gemfile.lock
touch app/template.rb
“`“`sh:compose.yml
services:
app:
container_name: app
build:
context: ./app
dockerfile: Dockerfile.dev
command: bash -c “rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b ‘0.0.0.0’”
ports:
– 3000:3000
depends_on:
Sorbet, tapiocaを導入して、Ruby On Railsで型チェックを行う。
環境
- WSL2
- Rails 7.1.3
- ruby 3.2.2
- sorbet (0.5.11255)
- sorbet-runtime (0.5.11255)
- tapioca (0.12.0)
目的
Sorbet, tapiocaを導入して、Ruby On Railsで型チェックをできるようにする。
注意
tapiocaを使ってRBIファイルを生成する。sorbet-railsはサポートが終了するので使用しない。
sorbet-railsレポジトリ
This repository is no longer maintained and will be sunset. The Sorbet co
enumの使用方法
### **enumとは?**
enum(enumeration: 列挙)は、名前を整数の定数に割り当てるのに使われるデータ型です。(列挙型というみたいです。)
名前は言語の定数として振る舞う識別子なので、整数を直に扱う場合よりもプログラムの読みやすさとメンテナンス性が向上します。
例::publicを0、:draftを1として、0や1で状態を定義できる
### 使い方
例として、article(記事)というモデルにstatus(状態)というカラムを作成し、それをenumを使って表します。
デフォルトで0(draft)になるように設定してます。
### カラム作成
“`ruby
class CreateArticles < ActiveRecord::Migration[6.0] def change create_table :articles do |t| # 他のカラムの定義 t.integer :status, default: 0 t.timestamps end end end ``` ###
RailsみたいなRustフレームワーク「Loco」でWebAPIを爆速で立ち上げよう!
https://twitter.com/Jin__Sugimoto/status/1755256431564189985?s=20
先日、列車を走らせましたので解説していきます。
# 前提
・Rust実行環境があること
https://www.rust-lang.org/ja/learn/get-started
# Rustフレームワーク「Loco」とは?
公式サイト(https://loco.rs/)によると
「サイドプロジェクトやスタートアップのためのRustの一人用フレームワーク」
と定義されています。
高速でRust APIを立ち上げるためのサーバーサイドフレームワークと言えるでしょう。
うちのチームはクリエイター主体でエンジニアは僕しかいないので最適かもしれません。
以下が挙げられている特徴になります。
## バッテリー付属
1人チームを強化します。サービス、データ、メール、バックグラウンドジョブ、タスク、それを動かすCLI、すべてが含まれています。
## Railsは素晴らしい
LocoはRailsに従っています。Railsのコンセプトは、最新
docker上のrails7でwhenever
# wheneverをdockerで動かすには
– rails taskをcronに登録してくれる便利なgem、whenever
– rails taskはActiverecordを使えて便利
– dockerは原則1コンテナ-1daemon
– railsコンテナではpumaでhttpをdaemon化するため、cronをコマンドで常駐できない
– そのためdockerの起動方法を工夫する# dockerのCMD注意点
– DockerfileにCMDを複数行記述しても最後の1行しか実行されない
– docker composeの場合、compose.yamlのcommandの方が優先される# docker上でwheneverを動かす
### とりあえずここから
– dockerでrails7が起動するとこ
routes.rbのルーティングの設定を確認するには
ターミナルで以下を打つ。
“`PHP:ターミナル
$ rails routes
“`“`
Prefix Verb URI Pattern Controller#Action
root GET / static_pages#top
users POST /users(.:format) users#creat
クレジットカード決済の導入
# はじめに
プログラミング初心者です。現在フリマアプリ作成、終盤の商品購入機能実装中。
初心者ですので、お手柔らかに。# PayJPの導入
#### 実装に入る前に
railsには標準でturboというアプリを高速化する機能が備わっており、JavaScriptの実装に不具合をきたすため、機能をオフにします。
#### payjp.js
PAY.JPを使用するためのJavaScriptのライブラリのこと。
読み込めるようにするために、こちらを記述
app/views/layouts/application.html.erb
“`html
“`
#### JavaScriptの実装
card.jsファイルを作り、読み込める操作をしていきます。
PAY.JPの公開鍵をファイル内に記述します。# トークン化の処理
#### typeの説明
card:カード番号入力欄、有効期限入力欄、CVC入力欄の順に横に並んだフォーム
cardNu
lambyを使ってみる
# はじめに
先月、AWS SAMを利用してrubyをlambdaで動かせることは分かったのですが、railsをlambdaで動かせないかと調べたところ、lambyが出てきたのでこの記事は調査禄となります。
(lambyそのものは前々から知ってたものの、今まで触ったことがなかったので今回が初となります)# スタートアップに準じて触ってみる
https://lamby.cloud/docs/quick-start
## 準備
quick-start記載の以下のコマンドを実行
“`
$ docker run \
–rm \
–interactive \
–volume “${PWD}:/var/task” \
ghcr.io/rails-lambda/lamby-cookiecutter \
“gh:rails-lambda/lamby-cookiecutter”
“`
プロジェクト名を入力
“`
project_name [my_awesome_lambda]: learning_deliverable
“`コンテナの中に入り、awsの設定を
【Rails】ActiveRecordでSQLっぽくテーブル結合する方法
# 環境
Ruby 3.0.1
Rails 6.1.6
PostgreSQL# やりたいこと
Railsのメソッドを使ってテーブルを結合し、結合先の値を集計・並べ替えを行いたいと思います。
例えば、以下のようなデータベースがあるとします。![ActiveRecord_sql_sample_er.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674409/4891d4f4-1c2b-136f-a410-8e700a12b59d.png)
こちらは、ユーザーが持っている本をuser_booksに登録していくテーブルです。usersとbooksを多対多でアソシエーションを組んでいます。
これを使って、たくさん本を持っているユーザー順に並べ替えたいと思います。# 準備
前述のER図を元にモデルを作成し、アソシエーションを組んで、コンソール等で必要なデータを作ります。詳細はトグルの中に記載しています。作り方がわかる方は飛ばしてください。
詳細
Railsでデータを効率的にカウントする方法
### 自己紹介
現在、SEとして業務系システムの開発に従事している者です。
WEBエンジニアとして転身するにあたり、主にRuby on RailsとNext.jsを中心とした勉強をしています。
よろしくお願いします。—————
今日は、Railsでデータをカウントする際に便利な`count`関数の使い方について詳しく解説します。データの数を数えることは、Webアプリケーション開発においてよくある要件の一つです。Railsでは、このようなデータ操作を簡単かつ効率的に行うためのメソッドが豊富に用意されています。
### `count`メソッドの基本
`count`メソッドは、ActiveRecordのスコープに対して呼び出すことができ、指定された条件にマッチするレコードの数を返します。最もシンプルな形では、モデル全体のレコード数を取得することができます。
“`ruby
User.count
“`
このコードは、`users`テーブルのレコード総数を返します。
### 条件付きカウント
`count`メソッドは、条件を指定して特定のレコードの数
【Next.js × Rails】チーム開発 Twtichクリップのプレイリスト作成アプリ
# 目次
[はじめに](https://qiita.com/takuya-38/items/e86db9026c1092e616e8#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB)
[作成したプロダクト](https://qiita.com/takuya-38/items/e86db9026c1092e616e8#%E4%BD%9C%E6%88%90%E3%81%97%E3%81%9F%E3%83%97%E3%83%AD%E3%83%80%E3%82%AF%E3%83%88)
[開発の流れ](https://qiita.com/takuya-38/items/e86db9026c1092e616e8#%E9%96%8B%E7%99%BA%E3%81%AE%E6%B5%81%E3%82%8C)
[自分の振り返り](https://qiita.com/takuya-38/items/e86db9026c1092e616e8#%E8%87%AA%E5%88%86%E3%81%AE%E6%8C%AF%E3%82%8A%E8%BF%94%E3%82%8A)
[まとめ]
【Ruby,Rails】クラスメソッドとインスタンスメソッドの違い
どうもこんにちは。
今回は、初心に帰ってクラスメソッドとインスタンスメソッドについてまとめます。
# まずは実行される時の形から覚える
## クラスメソッド
クラスメソッドは以下のような形で実行されます。
“`ruby:Railsコンソール
# newメソッド
pry(main)> Sample.new
# createメソッド
pry(main)> Sample.create(name: ‘サンプルA’)
# findメソッド
pry(main)> Sample.find(1)
# allメソッド
pry(main)> Sample.all
“`## インスタンスメソッド
インスタンスメソッドは以下のような形で実行されます。
“`ruby:Railsコンソール
# インスタンスを作成してから…
pry(main)> sample = Sample.new
# saveメソッド
pry(main)> sample.save
# updateメソッド
pry(main)> sample.update(name: ‘サンプルB’)
“`## 違いは…
商品購入機能 単体テストコードの実装
# はじめに
プログラミング初心者です。現在フリマアプリの終盤、商品購入機能実装中。
間違っていたら、コメントをお願いします。
# 単体テストコード
これまで、商品購入機能の実装を進めてきました。
まだ、クレジットカード機能の実装はしていませんが、ひとまずテストコードを書きます。### 今回のポイント
1、MySQL client is not connectedのエラーが出たときはこちらを記載!config/environments/test.rb
“`
Rails.application.configure do
#省略
config.active_job.queue_adapter = :inline #追記
#省略
“`
2、カラム名は揃えるべし
テストコードのファイルやFacrtoryBotのファイルごとで、ActiveHashカラムの~~~_idのidを付けたり付けなかったりしていました。
それによって、テストコードがいつまでもActiveStorageエラーになり成功しませんでした、、、。3、誤字をなくす!
“`
2) OrderAd
Formオブジェクト
# はじめに
プログラミング初心者です。現在Ruby on Railsにてアプリ作成中終盤。
間違っている箇所がありましたら、コメントお願いします。# Formオブジェクトについて
今回Formオブジェクトという新しい概念を学びました。
このFormオブジェクトの目的は、1つのフォームから送られてきた情報を複数のテーブルに保存することです。
### 手順
#### 1.Formオブジェクト用のモデルを作成します。
保存したいテーブルがorder(注文情報)とaddress(注文者の情報)だったら、order_address.rbというファイルを自主作成します。
#### 2.そのファイルにform_withで使用する機能とバリデーションを作成します。
“`
include ActiveModel::Model
attr_accessor :hoge, :hogehoge,:hogehogehoge ~~~~↓以下バリデーションの記述
“`
#### 3.データをテーブルに保存する処理
“`
↑バリデーションの記述ef save
order = Order
【Rails】form_tagとは
# form_tagとは
`form_tag`は、HTMLのフォーム要素を生成するためのヘルパーメソッドの1つです。このヘルパーメソッドは、フォームを手動で構築する必要がある場合に使用されます。特に、モデルと関連付けられていないフォームを作成する場合や、フォームが複雑な場合に便利です。`form_tag`は、HTMLの`
【Rails】Strong Parametersとは
# Strong Parametersとは
Strong Parameters(ストロングパラメータ)は、Railsアプリケーションで安全にリクエストパラメータを扱うための仕組みです。これは、マスアサインメント脆弱性(Mass Assignment Vulnerability)を防ぐために導入されました。マスアサインメント脆弱性は、フォームから送信されるパラメータを使用して、意図しない属性の更新や作成を許可する可能性があるセキュリティ上の問題です。Strong Parametersを使用することで、コントローラーで受け取ったリクエストパラメータから明示的に許可されたパラメータのみを取り出し、使用することができます。
Strong Parametersを使用するには、ストロングパラメータを許可するためのホワイトリストを定義する必要があります。通常、コントローラーのプライベートメソッド内でこれを行います。
# 使用方法
例えば、`create`アクションで`User`モデルに対してパラメータを許可する場合は、以下のようにします。
“`rb
class UsersControlle
【Rails】パスワードのハッシュ化
# パスワードのハッシュ化とは
パスワードのハッシュ化は、セキュリティ上の重要な手法であり、ユーザーのパスワードをデータベースに保存する際に平文ではなくハッシュ化された形式で保存することを意味します。これにより、パスワードがデータベース内に暗号化され、万が一データベースが漏洩しても、実際のパスワードを知ることはできなくなります。# 実装手順
以下は、提供された用語を使用してパスワードのハッシュ化を実装する手順です。1\. **gem bcrypt**
`bcrypt`は、パスワードの安全なハッシュ化を行うためのライブラリであり、Ruby on Railsのプロジェクトで使用されることがあります。Gemfileに`bcrypt`を追加して、`bundle install`コマンドを実行してインストールします。Gemfile:
“`rb
gem ‘bcrypt’, ‘~> 3.1.7’
“`
ターミナル:
“`
$ bundle install
“`2\. **password_digestカラム**
ユーザーのパスワードをハッシュ化して保存するために、データベース
【Rails】before_actionとは
# before_actionとは
`before_action`は、コントローラー内のアクションが実行される前に特定の処理を実行するためのフィルターです。これは、アクションの実行前に事前に定義されたコードを実行することができるため、DRY(Don’t Repeat Yourself)原則に従ってコードを簡潔に保つのに役立ちます。`before_action`を使用すると、以下のようなことができます。
1\. 特定のアクションにアクセスする前にユーザーの認証を行う。
2\. 特定のアクションにアクセスする前に、特定の条件が満たされていることを確認する。
3\. 特定のアクションにアクセスする前に、特定のデータをロードする。`before_action`は、コントローラーのクラス定義内で使用され、指定されたアクションが実行される前に実行されるメソッドを指定します。
例えば、以下のように`before_action`を使用して、特定のコントローラー内のアクションが実行される前に認証を行うことができます。
“`rb
class UsersController < Applica
【Rails】getとpostの違い
# getとpostの違い
RailsにおけるGETとPOSTの違いは、HTTPリクエストの種類とその目的にあります。# GETリクエスト
– リソースの取得を目的とするリクエストです。
– リクエストされたURLに対応する情報を取得するために使用されます。
– リクエストパラメータはURLのクエリ文字列に含まれます。
– リクエストはブラウザのアドレスバーに表示されるため、ブックマークや履歴に保存される可能性があります。
– キャッシュが可能であり、同じURLに対する複数のGETリクエストは、同じ結果を返す必要があります。
# POSTリクエスト
– サーバーにデータを送信するためのリクエストです。
– リクエストされたURLにデータを送信し、それに基づいて処理を行います(データの作成、更新、削除など)。
– リクエストパラメータはリクエストボディに含まれます。
– データの送信が暗号化され、ブラウザのアドレスバーに表示されません。
– キャッシュされません。Railsでは、これらのHTTPリクエストを受け取るために、それぞれのリクエストタイプに対応するルーティングメソッドが
【Rails】ロギングとは
# ロギングとは
ロギングは、アプリケーションの実行中に発生する様々なイベントや情報を記録することを指します。これには、リクエストの処理、データベースクエリの実行、エラーメッセージなどが含まれます。ロギングは、アプリケーションの動作を理解し、デバッグやトラブルシューティングを行う際に非常に役立ちます。Railsのデフォルトのロギング設定では、開発環境とテスト環境では詳細な情報が記録され、本番環境では情報が最小限に抑えられます。これにより、開発中やテスト中はデバッグがしやすく、本番環境ではパフォーマンスが最適化されます。
ロギングは、`logger`オブジェクトを介して行われます。このオブジェクトはRailsアプリケーション全体で利用可能であり、`Rails.logger`を介してアクセスできます。ログレベル(debug、info、warn、error、fatal)を指定してログメッセージを出力することができます。
以下は、ロギングの基本的な使用例です。
“`ruby
# デバッグ情報の出力
Rails.logger.debug(“This is a debug messag