- 1. text型のindex設定時は長さを指定する
- 2. Ruby,Railsのバージョンアップ
- 3. 【Rails】 local: trueについて
- 4. mysql2インストール時のエラー対応
- 5. Ruby on Rails5 速習実践ガイドを読んで
- 6. 投稿アプリのコメント機能
- 7. 投稿アプリの複数ページで利用する表示の一部をまとめる
- 8. 投稿アプリの投稿表示順を並べる
- 9. 投稿アプリで本人のみ編集削除を許可しよう
- 10. 【Rails】NOT NULL制約の設定方法
- 11. Ruby on Rails入門者向け:基本メソッド12選
- 12. Rails7でreact-rails( Shakapacker対応)を使う
- 13. 投稿アプリマイページ機能の実装
- 14. ghaにおけるrspecで発生するActiveRecord::ConnectionNotEstablished: MySQL client is not connected への対処
- 15. 【Rails】rails generate controllerで生成されるファイルを制限する【Railsアプリ全体のジェネレータ設定変更】
- 16. docker composeでRailsアプリをDocker化する
- 17. form_with使用時に結びつきのないmodelがi18nで翻訳されなかった時の話
- 18. ユーザー管理機能
- 19. kaminari で データ件数が膨大(1000万件)の際の高速化案。検索してください。
- 20. Rails パラメータを直接使って四則演算する際の注意点と解決策
text型のindex設定時は長さを指定する
# 前提
– Rails 7.0.4
– MySQL8系(docker)# エラー内容
text型のindex設定でマイグレーションしたら“`
add_index :table_name, [:not_text_column, :text_column]
add_index :table_name, :text_column
“`エラーが起きた
“`
…
rails aborted!
StandardError: An error has occurred, all later migrations canceled:Mysql2::Error: BLOB/TEXT column ‘normalized_value’ used in key specification without a key length
…
Caused by:
ActiveRecord::StatementInvalid: Mysql2::Error: BLOB/TEXT column ‘normalized_value’ used in key specification wi
Ruby,Railsのバージョンアップ
# 背景
– Ruby2.7.7とRails6.0.6.1で開発したアプリを運用します。デプロイ先はherokuで特に問題なくアプリは動いていました。
– しかしながら、Ruby2.6.ZとRails6.1.Zでは、Status(Rails Maintenance Plicy)が「EOL」となっています。
– そこで、Status(Rails Maintenance Plicy)が「Maintained for Security Issues」となっているRuby3.0.ZとRails6.1.Zへのバージョンアップを試みました。<参考記事>
https://www.fastruby.io/blog/ruby/rails/versions/compatibility-table.html
# 現在のバージョン
Ruby:2.7.7
Rails:6.0.6.1
bundler:2.4.13
node:16.20.0
npm:8.19.4
yarn:1.22.19
webpack:4.46.0
※開発環境は、macOS Monterey バージョン12.1です。
※エディターは、VS
【Rails】 local: trueについて
# local: trueについて
## local: trueとは
Railsはデフォルトで同期処理になっています。
しかし、form_withはデフォルトで非同期処理(ajax)になっています。
※Rails5.2< あなたが使用しているRailsのバージョン < Rails 7.0の状態の場合 そこで、下記のようにform_withにlocal: trueオプションを付与することで、form_withが非同期処理から同期処理に変更されます。 それがlocal: trueオプションになります。 ```ruby <%= form_with model: @board, class: 'new_board', local: true do |f| %><%= f.label :title %>
<%= f.text_field :title, class: 'form-control' %>mysql2インストール時のエラー対応
# 前提
– macOS:13.0(22A380)
– ruby:3.1.4p223 (2023-03-30 revision 957bb7cb81) [arm64-darwin22]
– rails:7.0.4
– bundler:2.3.26
– mysql2:0.5.5# サマリー
– mysql2インストール時に、opensslの読み込み先が間違っているためエラーになる
– なので、読み込み先を指定してあげる必要がある
– 自分の場合は、[opensslのリンク先の設定を行い](https://zenn.dev/obregonia1/articles/2a804d3a3ecb17)、[mysql2のビルドオプションの指定](https://rooter.jp/environment/bundle-install-mysql2-on-m1/)で解決した# 作業ログ
mysql2をbundle installすると、“`
Fetching mysql2 0.5.5
Installing mysql2 0.5.5 with native extensions
Gem:Ruby on Rails5 速習実践ガイドを読んで
# はじめに
今回はrailsインプット学習の一環として
[現場で使える Ruby on Rails 5速習実践ガイド](https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B-Ruby-Rails-5%E9%80%9F%E7%BF%92%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E5%A4%A7%E5%A0%B4%E5%AF%A7%E5%AD%90/dp/4839962227)を読了しましたので、その感想・学んだことを記述していこうと思います。* これから読もうと検討しているが、その前に一通り本書の概要を知りたい方
* 読了したが改めて本書の要点を整理したい方といった方々にお役に立てれば幸いです。
# よかったところ
### 簡単なアプリを作りながらrailsの基礎を学べる
表題にあるように、本書では簡単なTodoアプリとタスク管理アプリを作成しながらrailsを学ぶことができます。
2つ目のタスク管理アプリに関しては多投稿アプリのコメント機能
コメント機能の実装です
正直ここはすごく苦手です。。。
Xの素晴らしい出来に改めて尊敬です!### 目的
– アソシエーションを復習
– ルーティングのネストの理解コメントは、ツイートと別のテーブルで管理しなくてはなりません。
なのでコメントテーブルを作る必要があります
さらに、コメントはどの投稿に対してのコメントなのか、
誰の投稿したコメントなのか明示されている必要があります
そのため、userモデルとtweetモデルの2つにアソシエーションを組む必要があります### Commentモデル作成
`rails g model comment`#### マイグレーション編集
db/migrate/20XXXXXXXXXXXX_create_comments.rb
“`ruby
lass CreateComments < ActiveRecord::Migration[7.0] def change create_table :comments do |t| t.integer :user_id t.integer :tweet_id投稿アプリの複数ページで利用する表示の一部をまとめる
テックキャンプの復習です!
いいねお願いします!### 目的
– 部分テンプレートの理解
– renderメソッドで描画方法を理解
– 部分テンプレートのメリットを理解### 表示の一部をまとめて再利用しよう
#### 部分テンプレート
ビューファイルにおいて繰り返し使用するコードを切り出し、再利用する仕組み
rubyで繰り返し使うような処理をメソッドでまとめてきたのと同じ。テンプレート自体のファイル名は、命名規則として、アンダースコア`_`を先頭に記述します
### 投稿表示一覧部分をまとめよう
`app/views/tweets`に`_tweet.html.erb`作成#### renderメソッド
部分テンプレートを呼び出す際に利用するメソッド
#### partialオプション
renderメソッドで使用できるオプション
`partial`というオプションをつけ、部分テンプレート名を指定することで、該当する部分テンプレートを表示できる
例)
`<%= render partial: "sample" %>`
#### localsオプション
renderメソ投稿アプリの投稿表示順を並べる
テックキャンプのカリキュラムの復習です!
いいねお願いします!“`ruby“`
### 目的
– orderメソッドの理解### 投稿最新順表示
#### レコードの取得順変更
##### orderメソッド
ActiveRecordメソッド
テーブルから取得してきた複数のレコード情報を持つインスタンスの、並び順を変更するメソッド`インスタンス = モデル名.order(“並び替えの基準となるカラム名 並び順”)`
ASC(昇順) DESC(降順)app/controllers/tweets_controller.rb
“`ruby
def index
@tweets = Tweet.includes(:user).order(“created_at DESC”)
“`投稿アプリで本人のみ編集削除を許可しよう
オンラインスクールの復習のための備忘録です!
いいねお願いします!
### 目的
「deviseのメソッドを使用し、ユーザーのログインの有無を変える」など、アプリ制作において使用頻度の高い分岐を体験し、理解する##ログイン中のユーザー情報取得
###投稿者本人か確認して表示を変えよう
編集ボタンと削除ボタンの表示部分をif文で囲う
“`ruby
~略~
<% if user_signed_in? && current_user.id == tweet.user_id %><%= link_to '編集', edit_tweet_path(tweet.id) %> <%= link_to '削除', tweet_path(tweet.id), data: { turbo_method: :delete } %> <% end %>
~略~
“`
`current_u【Rails】NOT NULL制約の設定方法
カラムにNOT NULL制約を追加するにはマイグレーションファイルに以下のように記述します。
“`rb
def change
change_column_null :テーブル名, :カラム名, false
end“`
`users`テーブルの`is_sample`カラムにNOT NULL制約を追加する場合は以下のようになります。
“`rb
def change
change_column_null :users, :is_sample, false
end“`
Ruby on Rails入門者向け:基本メソッド12選
この記事では、Rails初学者の私が知っておくべきだと感じた基本的なメソッドを12個、簡単な説明と共に紹介します。
### 1. find
用途: 特定のIDを持つレコードを検索。
例: User.find(1) – IDが1のユーザーを検索。
### 2. find_by
用途: 指定した条件に一致する最初のレコードを検索。
例: User.find_by(name: ‘Bob’) – 名前がBobのユーザーを検索。
### 3. all
用途: 全てのレコードを取得。
例: User.all – 全ユーザーを取得。
### 4. create
用途: 新しいレコードを作成して保存。
例: User.create(name: “Bob”) – 新しいユーザーを作成。
### 5. new
用途: 新しいインスタンスを作成(保存はしない)。
例: user = User.new
### 6. save
用途: インスタンスをデータベースに保存。newメソッドとセットで使用。
例: user.save
### 7. update
用途: 既存のレコードを更新。
例: user.updaRails7でreact-rails( Shakapacker対応)を使う
## 概要
今回はRails7でreact-railsのgemを使ってReactを使う方法を紹介します。https://github.com/reactjs/react-rails
## 初期設定
基本的にはGitHubのドキュメントに従います。https://github.com/reactjs/react-rails/blob/master/docs/get-started.md#use-with-shakapacker
### プロジェクトの作成
標準にするとWebpackerが入ってしまうのでそこはコマンドで後から入れられるようにします。
“`
rails new my-app –skip-javascript
“`
### shakapackerをインストール
shakapackerをインストールします。“`
bundle add shakapacker –strict
rails shakapacker:install
“`### Reactとパッケージをインストール
React本体と本体を動かすためのパッケージをインストールします。
“`投稿アプリマイページ機能の実装
こちらも備忘録です!
### 目的
– アソシエーションの理解
– N+1問題の対策を理解### ツイートにユーザー情報を追加
「誰が投稿したのか」わかるようになり
– 特定のユーザーがつぶやいたツイート一覧を取得できる
– ツイートの削除を行う際につぶやいた本人しか削除できないように設定できる
機能が実現可能になります#### tweetsテーブルにカラムを追加
tweetsテーブルに新しく`user_id`というカラムを作成する
そこにツイートを投稿したユーザーのidを保存します
#### tweetsテーブルにuser_idカラムをinteger型で追加
ターミナル`rails g migration AddUserIdToTweets user_id:integer`
`rails db:migrate`### ツイート保存時にユーザー情報も追加
user_idカラムに、ツイートを投稿した(現在ログイン中の)ユーザーの
idを保存する処理を記述
ここに保存すべき値は、currenr_userのid
#### current_userメソッド
現在ログインしていghaにおけるrspecで発生するActiveRecord::ConnectionNotEstablished: MySQL client is not connected への対処
## エラー内容
“`rb
ActiveRecord::ConnectionNotEstablished:
MySQL client is not connected
“`## 改善前の実装
“`yml:.github/workflows/backend_test.yml
name: Backend Testjobs:
run-rspec:
runs-on: ubuntu-latest
services:
mysql:
image: mysql:8.0
ports:
– 3306:3306
env:
MYSQL_ALLOW_EMPTY_PASSWORD: “yes”
“`## 改善策
ヘルスチェック周りのオプションを設定する
これにより、rspec実行前にmysqlコンテナの起動が完了していることを確認できるようになる(はず)。## 改善後の実装
“`yml:.github/workflows/backend_test
【Rails】rails generate controllerで生成されるファイルを制限する【Railsアプリ全体のジェネレータ設定変更】
※この記録は、プログラミング初学者である私が、行き詰まったり難しいと思ったりしたものを復習できる様にとして残している自分メモです。同じ様なところでつまずいている方のお役に立つことができれば尚よし。間違った記載等あれば教えていただければありがたいです。
## はじめに
いろんなファイルを自動作成してくれるgenerateコマンド。しかし初期段階では何から何まで自動生成されると煩わしさを感じるものもあるからRailsにはジェネレーター実行時にファイルを生成しない為の設定も用意されている。
今回は、config/application.rb内の設定によって、generate コマンドで生成されるファイルに制限をかけようかと。## rails generation時の挙動を確認
ターミナルでrails generation(またはrails g)を実行。
下記の様な色々なファイルが自動生成される。“`
$ bin/rails g controller boards
Running via Spring preloader in process 26592
[+] Running 2docker composeでRailsアプリをDocker化する
## はじめに
今回はdocker composeで既存のRailsアプリをDocker化する方法を学んだので、
アウトプットしていこうと思います。## 前提
* Docker未使用で動作する既存Railsアプリを使用する
* 以下の環境で構築する
“`
ruby: 3.2.2
Rails: 7.0.6
postgre: 12
docker-compose: 3.9
“`## 手順
0\. Dockerのインストール & 起動
1\. 任意の階層に作業ディレクトリを作成 & 移動
2\. Docker化してない既存Railsアプリをクローンしてくる
3\. 各種必要ファイルの作成
4\. database.ymlの編集
5\. コンテナ起動
6\. ブラウザで動作確認### 0. Dockerのインストール & 起動
Docker(for Mac)のインストールおよび起動のやり方に関しては、
下記URLを参考にしてみてください!https://matsuand.github.io/docs.docker.jp.onthefly/desktop/ma
form_with使用時に結びつきのないmodelがi18nで翻訳されなかった時の話
## はじめに
こんにちは、Webエンジニア目指して学習中のさばと申します🐟(X:@saba7678pg)
昨夜戦っていたエラーとの痕跡を折角なので記録しておこうと思います。:::note warn
もっとこうした方が良い、この方法だと不都合が起きる等
何かございましたら、お手数ですがコメント・DM等でお知らせ頂けますと幸いです。
:::## 環境
– Docker環境下
– ruby 3.2.2
– rails 7.1.2
– rails-i18n 7.0.8## フラッシュメッセージが”一部”正しく翻訳されない
以下画像のように、フラッシュメッセージが一部だけ翻訳されない不具合が出ておりました。
[![Image from Gyazo](https://i.gyazo.com/96b60cfc87d63a36ac0510d45cf64b26.png)](https://gyazo.com/96b60cfc87d63a36ac0510d45cf64b26)
“` ruby
# views/posts/_form.html.erb<%= form
ユーザー管理機能
ユーザ管理機能はとても便利なRuby on RailsのGem機能です!
備忘録として投稿します!### 目的
– deviseを理解
– deviseを使用したユーザー登録の理解
### ログイン機能の実装
– ユーザー登録したユーザーのみがアプリを使えるようにする
– ログインしてないユーザーは投稿機能のアプリだと
新規作成、編集、削除機能などが使えないようにする### ライブラリのインストール
#### devise
ユーザー管理機能を簡単に実装するためのGem
Gemfile
`gem ‘devise’`ターミナル
`bundle install`
Gemインストール後はサーバー再起動
インストールしたGemの反映のタイミングが、サーバー起動時であるため
`ターミナル`### deviseの設定ファイルを作成
#### rails g devise::innstall コマンド
追加したdeviseというGemの「設定関連に使用するファイル」を自動で生成するコマンド`rails g devise:install`
### deviseのUse
kaminari で データ件数が膨大(1000万件)の際の高速化案。検索してください。
# kaminari は データ数の count 処理を実行している
最大ページ数を調べ、表示 or リンクを作るために
全データが何件あるのか count してしまいます。1000万件など膨大なデータがある場合には count 処理が重くなり time out も発生します。
## ページネーションで10ページも移動して目視で探す人は…
手動で10ページも移動して目視で探すのは非効率なので
10ページ目まではページネーションを作るが
それ以降は検索してくださいというスタンスで高速化できます。## 実際のコード
“`erb.slim
= paginate @pv_logs, total_pages: 10
p ※ PV情報はデータが膨大なため、最大10ページまで移動できます、それ以上のページに移動する場合は検索条件を絞り込んでください。
“`Rails パラメータを直接使って四則演算する際の注意点と解決策
※この記事は僕がぶち当たった問題をとりあえずChatGPTくんに丸投げしてライティングしてもらったものです。
# はじめに
Railsアプリケーションを開発する際に、パラメータの処理は非常に重要です。
しかし、パラメータはデフォルトで文字列として扱われるため、予期せぬ結果が生じることがあります。
本記事では、その中でも掛け算の処理に焦点を当て、問題の理解と解決策について説明します。# パラメータの文字列扱いによる問題
Railsでは、リクエストパラメータはデフォルトで文字列として扱われます。例えば、以下のようなコントローラアクションがあるとします。“`ruby
# app/controllers/products_controller.rbclass ProductsController < ApplicationController def calculate_price price = params[:price] result = price * 5 render json: { result: result } end end `
関連する記事
OTHERカテゴリの最新記事
-
- 2024.09.19
JavaScript関連のことを調べてみた
-
- 2024.09.19
JAVA関連のことを調べてみた
-
- 2024.09.19
iOS関連のことを調べてみた
-
- 2024.09.19
Rails関連のことを調べてみた
-
- 2024.09.19
Lambda関連のことを調べてみた
-
- 2024.09.19
Python関連のことを調べてみた