Rails関連のことを調べてみた

Rails関連のことを調べてみた

railsでテーブルを関連付けした際のwhereでのカラムの指定の仕方について

– includes
– preload
– eager_load

などで関連テーブルを読み込んだ際に、whereメソッドから関連テーブルのカラムを参照したい場合はreferencesキーワードを使って関連テーブル名を宣言する必要がある
“`rb
User.includes(:posts).where(“posts.name = ‘foo'”)
  # Doesn’t JOIN the posts table, resulting in an error.
User.includes(:posts).where(“posts.name = ‘foo'”).references(:posts)
# Query now knows the string references posts, so adds a JOIN
“`

`joins`メソッドを使う際は不要だと思うが、`incluedes`などの関連付けをeager loadingするメソッドを採用した際にはreferencesメソッドの出番になる感じだと思う
https://api.rubyonrails.org

元記事を表示

【Rails】each, find_each, find_in_batches の違い

# 前提
– 環境
– Ruby:`2.5`
– Rails:`4.2`
– 少々古めのバージョンになります
– ただ、次世代のバージョンにおいても本記事が参考になれば幸いです
– 今回扱うデータ
– ***company.rb***
– `has_many :shops`
– ***shop.rb***
– `belongs_to :company`
– データ数
– 事前に取得する ***company*** の件数を`50`件とします

つまり、下記コードで取得される***company***の件数が`50件`という前提で進めます。
“`rb
Company.joins(:shops).where(shops: { prefecture: ‘東京都’ }).distinct
“`

# each

“`rb:メインの確認コード
companies.each.with_index(1) do |company, i|
puts “loop_count: #{i}, company_id: #{company.id}”

元記事を表示

[Rails] マークダウン形式でtext_areaに入力できるようにする

# commonmarker

– `gem commonmaker`をインストール
“`
gem ‘commonmarker’
“`
– helperに下記を記述
“`module ApplicationHelper
def markdown_to_html(text)
html = Commonmarker.to_html(text)
raw(html)
end
end
“`
– 例)show.html.haml
“`
= markdown_to_html(“# CommonMarker”)
“`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3842957/fd44edd2-6589-33c2-5658-d29cded00577.png)

### 参考URL
https://github.com/gjtorikian/commonmarker

思いのほかサクッと実装できました。
何かご指摘あればお願いします!

元記事を表示

VSCodeでrails開発する時のコーディング効率を上げたい

Railsの初学者です。

VSCodeでコーディングするときにスペルミスやタイピングに時間がかかることを課題に感じたため
Railsに関するエディターの設定や拡張機能を色々と試しています!
現状設定や導入を行ったものをまとめつつ、記事もアップデートしていきたいと思います。

# Emmetの設定
Emmet とは、htmlで補完してくれたり、省略記法で入力できる機能。
htmlはデフォルトで適用されていますが、html.erbでEmmetを使用するためには
setting.jsonで設定する必要があります。

“`json
{
“emmet.includeLanguages”: {
“erb”: “html”,
“html.erb”: “html”
}
}
“`

# 導入した拡張機能
VSCodeで以下の拡張機能を導入してみました。
知識が浅く、まだどんな機能が提供されているのか理解し切れていない拡張機能もあるので
これから使いながら理解していきます…!

## endwise
`def`や`if`の後の`end`を自動入力してくれる。

https

元記事を表示

個人開発を始めてみた #1

## 個人開発を始めた背景
初めまして。都内で新米エンジニアとして働いている者です。新卒として働き始めて、3ヶ月が経ちました。その中で、技術を高めるためには業務以外での膨大なアウトプットが必要だと考えるようになりました。とりあえず、100個ほど制作して、少しはまともになりたいと思っています。

そこで、1〜2年ほどかけて個人開発物を100個作っていこうと決心しました。たくさんの制作物を開発し、自分のナレッジを蓄積すると同時に、自分の開発スキルをブラッシュアップしていこうと考えています。

## Webサイト [試作品1号]
まず、Webサイトの制作を始めようと思い、ReactとTailwindCSSを使ってWebサイトを制作しました。しかし、UIがかなり微妙な仕上がりになってしまいました。

![スクリーンショット 2024-07-21 22.10.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1788291/2e22e5ee-4ab7-b53c-11f8-5748ede0fdf4.png)

元記事を表示

翻訳ファイルの反映を確認するときはサーバーを再起動するのが基本だろ?

新しく翻訳ファイルを追加したbranchを開いた際、viewに翻訳が反映されなかったので原因を4時間ほど探っていました。

– ファイルの場所
– ファイルの命名
– 設定の書き方
– ymlの書き方

多くの可能性を探りました。

しかし、ある記事を見た際に

‘gemをインストールしたらサーバーを再起動するのは基本中の基本です。’
という文言を見かけました。

今回の場合はgemをインストールしていたわけではないですが、以前取り組んだ教材に’翻訳ファイルに文言を追加した際はサーバーを再起動しよう!’みたいな文言があったことを思い出しました。

4時間という貴重な時間を割いた代償としてこの結論を得たのは不服ですが、解決したので今回は良しとしましょう。

元記事を表示

Rakeタスクの使い方

## 経緯
本番環境へあげる際に、rails db:migrateの順番が複雑化したことがありました。その結果、本番環境へデプロイする担当者が手間取ってしまうことが多々ありました。そこで、Rakeタスクを利用してマイグレーション順を自動化し、誰でも簡単にデプロイできるようにする方法を紹介します。

## Rakeタスクの基本
まず、Rakeタスクの基本的な作成方法を説明します。Rakeタスクは、Railsのプロジェクト内のlib/tasksディレクトリに配置します。

Rakeタスクのファイル作成
以下のようなファイルをlib/tasksディレクトリに作成します。
“`
touch lib/tasks/db_migrate.rake
“`
Rakeタスクのファイル作成
以下のようなファイルをlib/tasksディレクトリに作成します。

“`
# lib/tasks/db_migrate.rake

namespace :task do
desc “Custom DB Migrate”
task migrate_custom: :environment do
p

元記事を表示

Railsにおけるエラーメッセージの日本語化

# 【課題】
### エラーメッセージをわかりやすい日本語に設定したい
#### 英語表記ではユーザーが視覚的に判断しにくい
#### エラーメッセージが出現した際に、パッと見で何でエラーが起きで弾かれてるのかを判断しやすくしたい

# 【実装】
①Gemファイルへの記述
“`ruby:Gemfile
gem ‘rails-i18n’
“`

②gemを設定したのでここでbundle instalを行う
“`ruby:ターミナル
$ bundle install
“`
③config/application.rbのファイルを編集
“`ruby:config/application.rb
module BoardApp
class Application < Rails::Application config.time_zone = 'Tokyo' config.active_record.default_timezone = :local # デフォルトのlocaleを日本語(:ja)にする設定 config.i18n.default_

元記事を表示

Railsのデータベースマイグレーションファイルで適切にロールバックするためのupとdownの設定方法

## 経緯
業務の中で、rails db:rollbackを実行した際に適切にロールバックができないというエラーが発生しました。

この問題を解決するために、マイグレーションファイルのupメソッドとdownメソッドを調べて適切に設定する方法を見つけ、実装することで問題を解決しました。本記事では、その実装方法を紹介します。

## データベースマイグレーションとは
データベースマイグレーションとは、データベースのスキーマ(構造)をバージョン管理し、変更を適用したり取り消したりする仕組みのことです。これにより、データベースの変更履歴を管理し、開発と運用を円滑に行うことができます。

## upメソッドとdownメソッドの重要性
upメソッドはデータベースに変更を加える処理を記述します。対して、downメソッドはその変更を取り消す処理を記述します。これにより、変更の適用とロールバックが容易になり、バグや問題が発生した場合に迅速に対応できます。

## 実装方法
#### upメソッドの実装方法
upメソッドには、テーブルの作成やカラムの追加、インデックスの作成などの処理を記述します。
“`

元記事を表示

tagメソッドを使ってビューのコードを簡潔にする方法

Railsのviewテンプレートで条件分岐が多くなると、コードが複雑になりがちです。ここでは、ユーザーのステータスごとに「テキストと色」を変更するコードを例に、tagメソッドを使用してシンプルにする方法を紹介します。

## 従来のコード
以下は、ユーザーのステータスに応じて異なるスタイルのバッジを表示する従来のコードです。

“`
– case user.status
– when “approved”
span.badge.badge-outline-success.badge-lg = “Approved”
– when “denied”
span.badge.badge-outline-danger.badge-lg = “Denied”
– when “pending”
span.badge.badge-outline-info.badge-lg = “Pending”
– when “partial_denial”
span.badge.badge-outline-warning.badge-lg = “Partial Denial”
– when “u

元記事を表示

as_jsonとto_jsonの違いをまとめてみる

## はじめに
ActiveRecordのオブジェクトをJSON形式に直すときはto_jsonを使ってJSON形式に直していると思います。
それとは別に、as_jsonといったものもあります。
初めて見たときは、似てるけど何が違うんだろうと思っていました。
今回は、頭の中を整理しながら、違いをまとめてみようと思います。

## as_jsonとは
オブジェクトをハッシュや配列など、JSONエンコードが可能なオブジェクトに変換してくれます。特定の属性を含めたり除外したりできます。
とりあえず、どのような出力となるか試してみます。

### 1レコードをas_jsonした場合
1レコードの場合はハッシュ形式で表示されます。
“`rb
@users = User.find(1)

## puts @users.as_json
{“id”=>1, “name”=>”山田 太郎”, “email”=>”sample1@sample.com”, “created_at”=>”2024-07-20T13:46:10.150Z”, “updated_at”=>”2024-07-20T13:46:10

元記事を表示

【学習記録】

# 記憶トークン
* ブラウザがパスワードを持っていて(cookiesに保存している)、それをハッシュ化させてデータベースのハッシュ化パスワードと照らし合わせる。IDを暗号化したものをユーザーのブラウザに持っておいて、sample_appを経由して復号する。復号済みIDとハッシュ化パスワードを使って、認証を行い、trueならばセッション情報を再構築(復元)する。ユーザーIDは復号させるためハッシュ化しない。
ブラウザが持っているパスワードはランダムで良い。なぜなら、ブラウザとアプリが使用するだけで、人間は間に入らないから。(これを一般的にトークンという。パスワードは人間が作る情報であるのに対し、トークンはコンピュータが作成・管理する情報。)

* attr_accessorはメタプログラミング。データベースには保存しない仮想的なもの。
※メタプログラミング:プログラムを記述するプログラムを書くこと。

*raiseメソッドを入れるとエラーを網羅的に探索できる。

元記事を表示

params[:id]とparams[:テーブル名_id]との違い

プログラミング歴、1年未満の初学者です。
タイトルでもある通り、params[:id]とparams[:cocktail_id](例)との使い分け方について、webアプリを作成中に知ったので、cocktailを例に上げて、書かせていただきます。

cocktail = Cocktail.find(params[:id])の場合
一般的に、詳細ページや編集ページに使われ、URL -> /cocktail/1となり、:idパラメータを探します。

cocktail = Cocktail.find(params[:cocktail_id])の場合
一般的に、config/routesでネストしたときに使われるそうです。URL -> /users/1/cocktails/1

ネストしたときとは↓
“`ruby:routes.rb
resources :users, only: %i[new create]
resources :cocktails do
collection do
get :bookmarks
end
end
“`

元記事を表示

ransackで”数値項目”と”文字列項目”を一緒に検索する場合

## はじめに
ransackを使用して、数値項目と文字列項目を一緒に検索した際にエラーが出たので、対処法について記載します。
今回はid(Integer),name(String)でor検索を実装して、どちらかに検索対象文字が含まれていたら表示するというコードを記載している際にエラーが出ました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1003708/fe7b61c4-c573-4683-937e-5eb612d5513f.png)

## エラー内容
38のついたid(No) / 商品名を検索しようと検索欄に38を入れて検索ボタンを押すと下記のエラーが出ました。
型が異なるので型変換してくださいねといった内容のエラーとなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1003708/34833601-f49a-555d-9558-9d9d334fff39.

元記事を表示

rails console -e test

# テスト環境のコンソールを使えるようにする
“`
rails console -e test
“`
テスト環境のデータベースにレコードを生成したりすることができた。

# 出典
https://teratail.com/questions/289185#:~:text=1-,rails%20c%20%2De%20test,-%E3%81%A7%E8%A9%A6%E3%81%97%E3%81%A6

https://railsdoc.com/page/rails_console

# 感想
railsのドキュメントに書いてあったけどできなかった。
バージョンが違うからなのかはわからないができてよかった。

元記事を表示

Sidekiq v7.3に導入されたSidekiq::IterableJobについて

## はじめに

Sidekiq v7.3に `Sidekiq::IterableJob` と呼ばれる機能が導入されました。長時間実行されるジョブが安全にデプロイできるようになったとのことです。

* [sidekiq/Changes.md 7.3.0 at main · sidekiq/sidekiq](https://github.com/sidekiq/sidekiq/blob/main/Changes.md#730)

本記事では `Sidekiq::IterableJob` に関連するWiki/Mike Perhams氏の記事/実装を参考に調査を行い、分かったことをまとめます。

## 参考資料

* [Iteration · sidekiq/sidekiq Wiki](https://github.com/sidekiq/sidekiq/wiki/Iteration)
* [Iteration and Sidekiq 7.3.0 | Mike Perham](https://www.mikeperham.com/2024/07/03/iteration-and-sideki

元記事を表示

associationをキャッシュした場合の速度

## はじめに
N+1はパフォーマンスに影響することは知っていると思います。
ただ、パフォーマンスに影響するということはわかっても具体的にどれくらいの差があるのかを数値で見る機会は、なかなかったので、キャッシュしないものとキャッシュするものを比較してみたいと思います。

## テーブル関係
親usersテーブル、子postsテーブルを用意します。
“`rb:app/models/user.rb
class User < ApplicationRecord has_many :posts, dependent: :destroy end ``` ```rb:app/models/post.rb class Post < ApplicationRecord belongs_to :user end ``` ## seedの用意 以下のようなseedデータを用意します。データの件数は1000件です。 ```rb:db/seeds.rb 1000.times do |n| user = User.create!( name: "山田 太郎", email: "s

元記事を表示

【Rails】ArgumentError (Unrecognized status code :request_entity_too_large)

## はじめに
Rails7にアップデート中、request_entity_too_largeを使用している部分でエラーが発生したので、解消方法をまとめていきます。

## 問題
コード
“`ruby
render body: nil, status: :request_entity_too_large
“`

エラー内容
“`ruby
Completed 500 Internal Server Error in 1ms (ActiveRecord: 0.0ms | Allocations: 984)

ArgumentError (Unrecognized status code :request_entity_too_large):
“`

## 解決方法
Rails4.2からrequest_entity_too_largeはpayload_too_largeに変更されています。
request_entity_too_largeを使用している部分をpayload_too_largeに変更することで解消します。
“`ruby
render body: nil, status

元記事を表示

Rails7.2の新機能と変更点をまとめる【前編】

Rails7.2がbetaフェーズとなっています。

リリースに先立ち、新機能や変更点などをまとめつつ、実際に検証してみました。

## devcontainer
Rails7.2ではVSCode上で使えるdevcontainerを設定する機能が追加されました。

`rails new`を実行する際に`–devcontainer`オプションを付与できるようになっています。

また`devcontainer`コマンドを実行すれば、既存のRailsアプリケーションでも開発用コンテナの設定が可能です。

以下のIssueで導入の議論がされていました。

https://github.com/rails/rails/issues/50566

### 実際にやってみた
Rails7.1には`devcontainer`コマンドが存在しないのでエラーとなります。
“`bash
rails7.1-app % rails devcontainer
Unrecognized command “devcontainer” (Rails::Command::UnrecognizedCommandErro

元記事を表示

HTML,CSS,Ruby,Railsなどの参考資料まとめ(自分用)

HTML

HTML辞典

→HTMLのデジタル辞書。わからなくなったらここから引く。

https://html-coding.co.jp/annex/dictionary/html/

CSS

・CSS辞典

→CSSのデジタル辞書。わからなくなったらここから引く。

https://html-coding.co.jp/annex/dictionary/css/

https://www.tagindex.com/stylesheet/properties/

Rails

・Railsガイド

→Railsのデジタル辞書。わからなくなったらここから引く。

https://railsguides.jp/

元記事を表示

OTHERカテゴリの最新記事