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

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

RailsアプリケーションでAWS Parameter Storeを使用する方法

AWS Parameter Storeは、アプリケーションの設定値や機密情報を安全に管理するための便利なサービスです。
この記事では、Railsアプリケーションのproduction環境設定でAWS Parameter Storeの値を使用する方法について説明します。

**前提条件**
– AWSアカウントがあること
– AWS CLIが設定されていること
– Railsプロジェクトがあること

# 1. AWS SDKのセットアップ
まず、AWS SDKをプロジェクトに追加します。Gemfileに以下を追加し、bundle installを実行します。
“`ruby
gem ‘aws-sdk-ssm’
“`

# 2. パラメータ取得用のヘルパーメソッド
次に、AWS Parameter Storeから値を取得するためのヘルパーメソッドを作成します。config/application.rbに以下のコードを追加します。
“`ruby
require ‘aws-sdk-ssm’

module ParameterStoreHelper
def fetch_parameter

元記事を表示

rails simple_calendar実装メモ

■ インストール
GemFileに以下記述
“`
#calender ui
gem “simple_calendar”, “~> 2.0”
“`
bundleで installをする
“`
bundle install
“`
■ 実装してみる(scssで)
ファイル作成
app\assets\stylesheets\custom_calendar.scss
“`
@import “simple_calendar”;
.simple-calendar{
thead {
・・・その他記述可能
“`
■ erbファイル実装
.erbファイル にscss読み込み
“`
<%= stylesheet_link_tag "custom_calendar", media: "print, screen", "data-turbo-track": "reload" %>
“`
実装こういう感じ
“`
<%= month_calendar do |date| %>
<%= date %>
<% end %>
“`
■ イベントなど設定
controller
“`

元記事を表示

RailsのThreadの中でアクティブレコードのデータがとれない

# はじめに

Railsで並列処理をしたところ困ったことがあったのでまとめておきます

# 問題

以下のようにスレッドでfetch_dataをするような処理を書きました

“`rb
def self.where(ids:)
threads = []
results = []
mutex = Mutex.new

ids.each do |id|
threads << Thread.new do result = fetch_data(id) mutex.synchronize do results << result end end end threads.each(&:join) results end private_class_method def self.fetch_data(id) api_response = SomeAPI.get(id) record = SmapleActiveRecord.find(id) # ActiveRecordから取得

元記事を表示

RspecにおけるActiveRecord::StatementInvalid: Mysql2::Error: This connection is in use by: #への対処

## はじめに

実装をしている最中に以下のようなエラーが発生した。
“`rb
Failure/Error: _query(sql, @query_options.merge(options))

ActiveRecord::StatementInvalid:
Mysql2::Error: This connection is in use by: #
“`

このエラーの解決に少々手間がかかったので、まとめる。

## 実行バージョン

ruby 3.2.3
Rails 7.1.3
rspec-rails 6.1.3

## 解決策

ActiveRecordモデルの`has_one_attached`マクロに対して、`dependent: :destroy`を追加する

### 変更前

“`rb
class Hoge < ApplicationRecord has_one_attached :csv end ``` ### 変更後 ```rb class Hoge <

元記事を表示

CSSとSCSSはどんな違いがあるの?

# はじめに
同じWebページの見た目を作るものなのにCSSとSCSSとぱっと見似ているようなものがあり、業務始めたての頃は、なんじゃこれと思っていました。そこで、この2つの違いについてまとめていこうと思います。

# 1. CSS
CSSはWebページの見た目を定義する広く活用されている標準的なスタイルシート言語。

基本的な構文:
“`
body {
font-family: Arial, sans-serif;
}

h1 {
color: #333;
}
“`

# 2. SCSS
概要: SCSSはSassの構文の一つで、CSSに似た構文を持ち、より直感的に書ける。

基本的な構文:
“`
$primary-color: #333;

body {
font-family: Arial, sans-serif;
}

h1 {
color: $primary-color;
}
“`

# 3. CSSとSCSSの違い
##### 変数
CSSには変数の概念がありませんが、SCSSでは変数を使って色やフォントなどの値を再利用できます。これにより、コードの

元記事を表示

l メソッド

## 初めに

疑問に思ったことや上手くいかなかったことのアウトプットをしています。
自分なりの理解でアウトプットしていきます。初学者なので誤りもあると思います。
その際はご指摘いただけると幸いです。

## lメソッドとは
日時をローカル、つまり日本で読みやすいフォーマットにするメソッド。
コンピュータそのままだと日時が読みづらいのを、config/application.rbに記述した場所を基準にする。

## lメソッドの使用方法
1.まず’rails-i18n’, ‘~> 7.0.0’をGemfileに記述し、インストールする。
2.config/application.rbに以下のコードを記述する。
“`
# デフォルトの言語を日本語にします
config.i18n.default_locale = :ja
# デフォルトのタイムゾーンを日本時間にします
config.time_zone = ‘Tokyo’
“`
3.以上で準備完了。後はビューファイルにlメソッドを書けば簡単に見やすい日時表記になる。


“`
<% @posts.each do |post| %>

元記事を表示

【Rails】after_createとafter_create_commitの挙動の違い

## はじめに

Railsのコールバックメソッドである`after_create`と`after_create_commit`の違いを備忘録としてまとめます。

最後まで読めば、両者の挙動の違いや使い分けが理解できるかなと思います。

この記事におけるバージョンは**Rails 7.1**です。

## `after_create`と`after_create_commit`の挙動の違い

2つのメソッドの挙動をそれぞれまとめます。

なおこの後でてくる「トランザクション」は、`User.transaction do`のような明示的に開始するトランザクションだけを指しているわけではありません。

`User.create`などでデータベースに変更を加える際にRailsが自動的に管理する内部的なトランザクションも含めて指しています。

### `after_create`

`after_create`はレコードがデータベースへ保存された直後、**トランザクションがコミットされる前に実行されます。**

そのためコールバック内でエラーが発生した場合、トランザクション全体がロールバックさ

元記事を表示

wicked_pdfの代わりにFerrumを導入する方法

# はじめに
wicked_pdfで使用されているWkHtmlToPDFというgemが2023/1/2にアーカイブされました。
更新が行われなくなるため、維持のリスクが高まってきます。

https://zenn.dev/lovegraph/articles/e3c8baedfc5ed6

そこで、wicked_pdfに代わるferrumを導入してみました。
wicked_pdfと同じようにhtmlをpdfに変換できます。
導入の際に引っかかった点もあるので紹介していきたいと思います。

# 導入方法
Dockerfileにchromiumのインストール追加
“`dockerfiler
RUN apt-get update && apt-get install -y \
chromium \
chromium-driver
“`

gemインストール
“`
gem ‘ferrum’
“`

routes追加
“`rb
get “pdf_test”, to: “generate_pdf#index”
get “download_pdf”, to: “genera

元記事を表示

methodとsource_locaitonでメソッド定義の場所を探し、Railsのコードリーディングを効率よく進める

## はじめに
Railsのコードリーディングを少しだけうまく進められるようになってきたため、やり方を備忘録としてまとめます。

対象読者は、Railsのコードリーディングをしていきたいけど、そもそもメソッドがどこにあるかすら見つけられない、といった状況のエンジニアです。

この記事を最後まで読めば、気になるメソッドの定義場所を1人で探せるようになるかなと思います。

※バージョンは**Ruby 3.3**, **Rails 7.2**です。

## 問題

普段使っているフレームワークをより深く学びたいと思って、Railsのコードリーディングを始めています。

あまりにも規模が大きくどこから読んでいいか分からないため、まずはよく使うメソッドを1つずつ見ていこうと考えました。

しかし、そもそもメソッドがどこに定義されているかを発見するのにも一苦労です。

仮に特定できたとしても、その中でさらに他のメソッドが呼ばれており、追いかけていくことができなくなってしまいました。

## 解決策

`method`メソッドと`source_location`メソッドを活用することで、Railsの

元記事を表示

プレビュー機能の実装

# プレビュー機能実装

## 概要
新規投稿、投稿編集時に選択した画像がプレビューとして表示される機能

## preview.js作成
プレンビュー機能実装のため、app/javascriptの直下にファイル名 “preview.js” を作成する。

## importmapの編集
configフォルダにあるimportmap.rbへ下記を追記する。
pin “preview”, to: “preview.js”

## application.jsの編集
app/javascript/application.jsへ下記を追記する。
import “preview”

## プレビュー機能の実装
取得した画像をブラウザへ表示するためにjavascript側で生成する。

// 画像を表示するためのdiv要素を生成
const previewWrapper = document.createElement(‘div’);
previewWrapper.setAttribute(‘class’, ‘preview’);

// 表示する画像を生成

元記事を表示

Ruby on Rails 7.2の主要な新機能・機能追加・変更点

## はじめに

Rubyを使用したOSSのWebアプリケーションフレームワーク、Ruby on Rails(以下Rails)の最新バージョンである7.2(以下Rails 7.2)が[2024年8月10日にリリースされました](https://rubyonrails.org/2024/8/10/Rails-7-2-0-has-been-released)。

Rails 7.2は、開発用のDockerコンテナの設定の生成、YJITのデフォルト化、RuboCop / Brackeman / GitHub CIの設定の生成など、主に、プロジェクトを開発、運用するに当たって必要な設定をあらかじめフレームワーク側で用意したリリースとなっています。

本記事では、[Railsの公式ブログ](https://rubyonrails.org/blog/)や[Railsガイド](https://guides.rubyonrails.org/v7.2/)、GitHubのRailsプロジェクトの[Issues](https://github.com/rails/rails/issues)や[Pull Re

元記事を表示

CodeMirror6を用いたHTMLエディターの導入

## 概要
Ruby on Railsをベースとしたアプリ制作時に、Codemirror6の導入で苦戦したため、導入方法をまとめました。

Codemirror6は公式マニュアルに`Getting Started`のセクションが無く、どこを見たらいいのか分からないので、初心者にはかなりとっつきにくい文献という印象でした。

結論として、以下の`Bundling Example`のセクションを見ながら進める事でEditor構築することが出来たので、こちらの流れに沿って説明します。

https://codemirror.net/examples/bundle/

また、今回の説明ではRuby on Railsを使用していますが、Codemirrorの実装は基本Javascriptしか触ってないので、本記事を読むために必要知識はJavascript(+ Node.js)となります。

## エディターの導入
### 1. CodeMirror&HTMLパッケージのインストール
公式文書ではJavascript用エディターを導入していますが、今回私はHTML用エディターを実装したいので、H

元記事を表示

class=とclass:の違い

## 初めに

疑問に思ったことや上手くいかなかったことのアウトプットをしています。
自分なりの理解でアウトプットしていきます。初学者なので誤りもあると思います。
その際はご指摘いただけると幸いです。

## class=
HTMLにおける属性の書き方。要素にクラス名を直接指定している。
タグに使う。

## class:
ヘルパーメソッドにオプションを渡す時。
タグではなくヘルパーメソッド自体にどのようなCSSを使いたいかを指定している。

元記事を表示

パーフェクトRubyonRails備忘録2

# コントローラのアクションにおけるフック

– フックは3種類
– before_action
– アクション実行前に呼び出される
– after_action
– アクション実行後に呼び出される
– around_action
– アクションの前後で呼び出される
– around_actionの使い方
– around_actionで定義したメソッド内で、アクション内に処理を戻す必要がある。
– 例

“`ruby
class BooksController << ApplicationController around_action :action_logger # 略 def action_logger logger.info "before_action" yield # ここで、アクションに処理が戻される logger.info "after_action" end

元記事を表示

実装する前にきちんとドキュメントを読んだ方が良い、という話

どうも、初めまして。
tokeと申します。

今回は自分の失敗談を話したい、と思います。

# 実装する前にドキュメントを読まないと、最後になってゴールに辿り着けない可能性がある

そういう経験をしたのでご紹介します。

例えば、自社で集めた顧客のデータを活用し、Marketoにデータ連携したいとします。

marketoのAPIドキュメントを調べると、顧客の情報を登録する手段では以下の2パターンがあります。

## `POST /rest/v1/leads.json`を使うパターン

以下のドキュメントにある`POST /rest/v1/leads.json`を使って、顧客のデータを送信し、連携する事ができます。
https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/lead-database/leads

[※Marketoで紹介されているサンプルデータになります]
![スクリーンショット 2024-08-10 13.16.34.png](https://qiita-image-store

元記事を表示

paramsのできること

## 初めに

疑問に思ったことや上手くいかなかったことのアウトプットをしています。
自分なりの理解でアウトプットしていきます。初学者なので誤りもあると思います。
その際はご指摘いただけると幸いです。

## paramsのできること
一時的に送る、もしくは受け取るデータの一時的な格納庫になる。コントローラ内で簡単にデータにアクセスしやすくなる。

## 具体的には
フォームから送信されたデータはPOSTリクエストの一部としてparamsに格納され、
URLのクエリパラメータはGETリクエストの一部としてparamsに格納される。

## クエリパラメータとは?
URLの一部として指定される追加情報のこと。
通常、URLの?の後に「key=value」の形式で書かれる。
複数のパラメータの場合は&で区切る。
主にGETリクエストで使われて、サーバーに何らかの情報を伝えるために利用される。
特定のデータの取得、検索結果の絞り込みが可能。

## 最後に
paramsは今までformメソッドでしか使った記憶がなかったので、
POSTリクエストでしか使わないと思ってたのでGETリクエストでも

元記事を表示

orderとpluckを併用する時には記述する順番に気をつけようというお話

あまり実用的なケースではないが、最新の一件のデータを取りたいがカラムはpluckしたい時に、クエリの呼び出し順に気をつけとかないと思うようなデータが取れないよというお話

# 試したコード
“`
last_tweet = User.pluck(:userName, :tweetContent).order(created_at: “DESC”).first
“`
※コードは実際に使ったものを改変しています

# 発生したエラー

“`
NoMethodError (undefined method `order’ for an instance of Array):
“`

# 解決策
“`
last_tweet = User.order(created_at: “DESC”).pluck(:userName, :tweetContent).first
“`

シンプルにorderで並び替えてからpluckすれば仕様を満たすことができる
pluckしてからorderしようとしても該当のカラム(created_at)がないので並び替えることができない

元記事を表示

Ruby on Railsの環境構築をDocker上で”ゼロから”やってみた

# はじめに
この記事では、Ruby on Railsのアプリを開発する際に必要となるDockerfileやcompose.ymlといったファイルを**コピペではなくゼロから**作成した手順を紹介します。環境構築の際に必要な情報はググればたくさんヒットするのですが、なぜそのような書き方をするのかを理解しないままコピペして使うのは個人的に嫌だったため、本記事を執筆するに至りました。

使用するDockerのバージョンは次の通りです。
“`sh
docker –version
# Docker version 27.1.1, build 6312585
“`

:::note
本記事を参考に環境構築を行う場合、最終的に必要な手順は最終節に書かれているので、お急ぎの方はそちらをご覧ください。
:::

# コンテナ上で試行錯誤してみる
ゼロからいきなりDockerfile、compose.ymlを書くのはさすがに難しいです。そこで、まず最初に、Railsアプリを立ち上げるまでに必要なプロセスをコ

元記事を表示

RailsのTimeクラスを覚えたい

# 概要
– 何度書いても忘れるのでメモ的な記事
– RailsはRubyのTimeクラスを拡張しているとのこと

# ドキュメント

ここみればいいと思います。

https://api.rubyonrails.org/classes/Time.html

# 今を取る

“`ruby
Time.current
=> Sat, 01 Jun 2024 10:24:15 JST +09:00
“`

`Time.now` でも取れるが、`Time.current`の場合、`Time.zone`または`config.time_zone`が設定されていれば、`Time.zone.now`を返してくれるのでお得(?)

# 今より前の時間を取りたい

色々ある

“`ruby
Time.current.ago(1.day)
=> Fri, 31 May 2024 10:25:03 JST +09:00
“`

intから`day`や`hour`を生やすことができる。複数形でも良い

“`ruby
[23] pry(main)> 3.day
=> 3 days
[24] pry(m

元記事を表示

RailsとReactのDocker環境を作ってみる

## Rails環境を作る

### Dockerfile
リポジトリのトップにbackendディレクトリを作成。
backendディレクトリにDockerfileを作成。
“`Dockerfile:Dockerfile
FROM ruby:3.1

WORKDIR /app
“`
dockerをビルド。
“`shell:
docker build .
“`
docker経由でrailsアプリケーションを作成。
Dockerfileがコンフリクト起こすけど、上書きはしない。
“`shell
docker run -it -v $(pwd):/app imageId bash -c “cd .. && gem install rails && rails new app -d postgresql –api”
“`
Dockerfileを書き換える。
“`Dockerfile:Dockerfile
FROM ruby:3.1

WORKDIR /app

COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfil

元記事を表示

OTHERカテゴリの最新記事