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

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

テーブル結合したほうが良い理由(Active Record)

## 学習環境
Ruby on Rails 6.0.3
PostgreSQL 16.1

## 課題内容と要件

Ruby on RailsでActiveRecordを使ったテーブル結合の勉強をしている時のこと…
以下のような要件があったと想定した問題がありました。

【要件】注文されていないすべての料理を返すこと
 ※`left_outer_joins`を使うこと

ER図は以下のようなイメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190651/d1758d7d-2e19-297e-191d-345282aae7f6.png)

## 答えとして考えたこと
Railsガイドをパラパラと見ながら、
なるほど、”注文されていない”だから、注文されたデータ(order_foodテーブルのorder_id)を見て、`where.not`を使うのかなと思ったのでした。
ただし、要件には`left_outer_joins`を使うこととある。
## 答えとそれぞれの処理
`left_out

元記事を表示

ActiveStorageでBlobをアップロードする

# 前提

1. AWS ECS Fargate等の使用で、コンテナ内にファイル生成ができない環境を使用している
1. `ActionDispatch::Http::UploadedFile` オブジェクトではない方法でファイルを受信している

# 方法

以下はBase64形式でPNG画像を受信した時、一時ファイルを生成せずにActiveStorageでアップロードする方法です。

“`ruby
image = “data:image/png;base64,xxxxx”
mime_type = image[%r/(image\/[a-z]{3,4})|(application\/[a-z]{3,4})/]
extension = mime_type[%r{\b(?!.*/).*}]
contents = image.sub(%r/data:((image|application)\/.{3,}),/, ”)
decoded_data = Base64.decode64(contents)
blob = ActiveStorage::Blob.new(key: ActiveSt

元記事を表示

Elasticsearch Rails 7とnet-http-persistentを同時に使うときにはFaradayアダプターを指定する

## Railsアプリケーションのgemのバージョンを上げたときエラーが起きた

Railsアプリケーションのgemのバージョンを`bundle update`コマンドで上げていました。
`bin/rails s`コマンドでRailsアプリケーションを起動するときに次のようなエラーがでるようになりました。

“`sh
ledsun@MSI:~/pubdictionaries►bin/rails s
=> Booting WEBrick
=> Rails 7.0.8 application starting in development http://localhost:3000
=> Run `bin/rails server –help` for more startup options
Exiting
/home/ledsun/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/faraday-2.9.0/lib/faraday/middleware_registry.rb:57:in `lookup_middleware’: :ne

元記事を表示

Railsの学習を終えて

## 初めに
こんにちは、Railsの学習を終えました。そのRailsの学習で感じたことや思ったことなどを書いていきます。

## Railsの学習で思ったこと
Railsの学習で思ったことは、めっちゃ便利だなということです。クエリを書く必要もなければ、コマンドを打てばファイルが生成されるのはすごく便利でした。先月、フレームワークなしでログイン機能や投稿機能などを開発していたのでなおさら便利に感じます。

## Railsの学習で大変だったこと
Railsの学習で感じたことは、環境構築です。特にbundleに何かを追加しようとすると必ずエラーになり大変でした。

## Railsの学習でやったほうが良いと思ったこと
MVCの理解をしておいたほうがいいなと思いました。これが理解できていないとエラーが起きた時にどこをどう直したらいいのかわからなくなるのでどこがどうつながっているのかを理解しながらRailsを使っていくのがいいと思いました。

## 最後に
Railsを初めて触ったときこんなに便利なんだと感動しました。ぜひRailsを勉強しようと思っていたらまず、フレームワークなしでアプリを

元記事を表示

Railsコンソールでのデータ編集

Railsでコンソールをもっと使って学習していこうと思い、コンソールでの基礎的なデータ編集のやり方をまとめました。

### コンソール(Console)とは

> [Cambridge Dictionary](https://dictionary.cambridge.org/ja/dictionary/english/console)
>

**a [surface](https://dictionary.cambridge.org/ja/dictionary/english/surface) or [device](https://dictionary.cambridge.org/ja/dictionary/english/device) with [controls](https://dictionary.cambridge.org/ja/dictionary/english/controls) for [electronic](https://dictionary.cambridge.org/ja/dictionary/english/electronic) [equipme

元記事を表示

# フリマアプリで販売手数料や販売利益を表示させたい(JavaScript)

# はじめに
プログラミング初心者です。
現在フリマアプリを作成中、終盤です。
今回アプリが完成し最終チェックをしていたところ、エラーが一つ飛び出てきたので記録します。

# JavaScriptで販売手数料や販売利益を表示させたい
今回のエラーとして、商品を出品する際に金額を入力すると販売手数料と販売利益が自動で出力される機能を実装したが、なんらかのエラーで保存がされなかった場合に前述の二つの項目が出力されなくなってしまうというものでした。
端的にコードを貼り付けて記録しちゃいます。
#### Before
“`js
window.addEventListener(‘turbo:load’, () => {

const priceInput = document.getElementById(“item-price”);
priceInput.addEventListener(“input”, () => {
const inputValue = priceInput.value;

const addTaxDom = Math.floor(inputVa

元記事を表示

【Rails】foreign_key: true を記述するかしないか

## はじめに
Userモデルと紐づいたProfileモデルを作成しようとしているところ。
User:Profile = 1:1 の関係にしたい為、t.referencesを追記。
~~~ruby:20240218073445_create_profiles
class CreateProfiles < ActiveRecord::Migration[6.0] def change create_table :profiles do |t| t.references :user, null: false t.timestamps end end end ~~~ ここで疑問に思った事は、foreign_key: trueをとりあえず追加しておけ。という記事が多くて理由はなんやねん、という事。これについて解説。 foreign_keyについての詳細は省略。 ## RubyとRailsのバージョン - Ruby 3.1.3 - Rails 6.0.6.1 ## 【結論】Railsの命名規則に従っていれば基本は不要 今回のケースのような場合はA

元記事を表示

rails7.1.3 での table_name_prefix の挙動の違い

## Rails7.1.3へのアップデート

rails7.1.3のアップデートの際に思わぬところで躓いたので共有です
rails7.1.3で適用された、このPRについてです

https://github.com/rails/rails/pull/50247

**対象読者**

– Rails エンジンで `table_name_prefix` を自分で定義している人

## さきに結論

– `blorgh`というエンジンがあったとして `lib/blorgh.rb`で `table_name_prefix`を上書きしていた場合、rails 7.1.3で効かなくなった
– `isolate_namespace`の呼び出し前に、`Blorgh`モジュールで`table_name_prefix`を上書きする

## 状況

### Rails7.1.2 までの環境

Railsエンジン側でモデルを用意しており、`table_name_prefix`を定義していたとします

`blorgh`というエンジンだとすると、下記のような感じ

“`lib/blorgh.rb
require

元記事を表示

RailsでCloud Storageの設定をする

# 概要
Rails7でActive Storageを使用して、Google CloudのCloud Storageの設定の仕方の記事です。設定するときに、このような記事がありそうでなかったので書きます。

# 前提
Active Storageの設定が終わって、保存先が以下のlocalの設定では動くものとします。
“`development.rb or production.rb
config.active_storage.service = :local
“`
Active Storageの設定が終わっていな人は[こちら](https://qiita.com/nagumo01/items/76b97a98e83604150496)を参考に設定してください。

# Google Cloudの設定
### Cloud Storageの設定
1. Cloud Storageを開いてバケットの作成
1. ロケーションタイプ、リージョンを設定(単一リージョンが1番安い)
1. デフォルトのクラスやアクセス制御を設定
1. 公開アクセスを禁止で問題ない

### サービスアカウントの作

元記事を表示

RSpecの導入方法(準備まで)

# 環境構築の手順
### ① Gemの追加
“`:Gemfile
group :development, :test do

# 以下追加
gem ‘rspec-rails’
gem ‘factory_bot_rails’
end
“`

### ② RSpec用の設定ファイルを生成する
“`
bundle exec rails g rspec:install
“`
下記のようにファイルが作成される
“`
create .rspec
create spec
create spec/spec_helper.rb
create spec/rails_helper.rb
“`

### ③ テストを実行してみる
“`
bundle exec rspec
“`
以下のような結果になれば、RSpecを利用する準備は完了。
テストファイルをまだ作成していないため、このように表示される。
“`
No examples found.

Finished in 0.00026 seconds (files took 0.05634 second

元記事を表示

デバイスやブラウザでハンドリングするにはUserAgentを使用する

# UserAgentとは
– エンドユーザが使用しているデバイスやブラウザを認識することができる機能

# 使用方法
以下のコードをcontrollerに記載することで`HTTP_USER_AGENT`を取得することができる

“`ruby
request.env[“HTTP_USER_AGENT”]
# => “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36”
“`
よって、下記のようにハンドリングすることができる。
### ブラウザによってハンドリング
“`ruby
def check_user_agent
ua = request.env[‘HTTP_USER_AGENT’]
if ua.include? “MSIE”
p “IEです”
elsif ua.include? “Firefox”
p “firefoxです”
e

元記事を表示

【Rails】コンソールを使いこなそう!レベル1 〜基本的な操作編〜

# コンソールの基本
コンソールとは、プログラムの出力を実際に表示するものです。
極端にいえば、1+1と入力すれば2が返ってきます。
“`console
>irb(main):001:0> 1+1
=> 2
“`
これを利用して、モデルを作ったり中身を確認したりもできます。

コンソールで実行できたことはそのままコードで使えるので、実装前に確認することでエラーを未然に防ぎつつ、着実にコーディングが行えるようになります。

# コンソールの起動 ・ 終了
railコンソールは、ターミナル上で`rails c`と打つと起動し`exit`で終了します。

“`console:コンソール
$ rails c # 起動
>irb(main):001:0> exit # 終了(ショートカットはcontrol + d)
“`

`rails c`で作成・編集したデータは、データベースに保存されます。

しかし試作の度にデータが作られるのは困る場合があります。
そんな時は`rails c -s`を使うと、データは保存されずに全てロールバックします。

“`console:コンソール
$ r

元記事を表示

Railsで特定のカラムを途中から必須にするバリデーションの実装方法

## 事象

Railsアプリケーション開発において、特定のカラム(ここでは便宜上「属性X」と呼びます)が初めは任意入力だったものの、ビジネスルールの変更により必須入力とする必要が出てくる状況は珍しくありません。この記事では、そのような要件変更を効率的に実装する方法について説明します。

## 実装

新規レコードの作成時にのみ「属性X」の入力を必須とするバリデーションを追加します。これは、`on: :create` オプションを使用して、バリデーションを新規作成時に限定することで実現します。

“`ruby:model.rb
class ExampleModel < ApplicationRecord validates :attribute_x, presence: true, on: :create end ``` このコードにより、新規レコードの作成時にのみ「属性X」の入力が必須となります。既存のレコードに対する更新操作では、このバリデーションは適用されません。 ## まとめ この記事では、Railsで特定のカラムを途中から必須に変更する際のバリデーションの実装方法

元記事を表示

Rubyプロジェクトでの主要ライブラリの活用

Rubyは、その表現力豊かな文法と豊富なライブラリ(gem)により、Web開発者の間で高く評価されています。Rubyプロジェクトにおける効率的な開発には、これらのライブラリを理解し、適切に活用することが不可欠です。この記事では、Rubyプロジェクトで頻繁に使用される主要ライブラリとその用途についてまとめてみました。

### 基本的なライブラリ
## WEBrick
用途: フロントエンドとバックエンド間のデータ移送。
WEBrickはRuby標準の簡易HTTPサーバーライブラリで、小規模なWebアプリケーションや開発時のテスト用サーバーとして利用されます。フロントエンドとバックエンド間のデータ移送を手軽に行えるため、開発プロセスをスムーズにします。

## CSV
用途: データの保存と読み込み。
データの保存や読み込みにはCSVライブラリが便利です。CSV(Comma-Separated Values)形式のファイル操作を簡単に行うことができ、データのインポートやエクスポートが必要なアプリケーション開発に欠かせません。

## JSON
用途: JavaScriptの変数で受け取る

元記事を表示

number_field_tag に設定オプション「step」を使って小数点を設定する

# 概要
number_field_tag に、小数点を入力できない!とお思いの方に有用です。

# 対象
– number_field_tag に小数点入力ができる設定方法を探している
– stepの書き方 早見表を見たい方
– step: 1
– step: 0.1
– step: 0.01
– step: 0.001

## 基本形

“`shell:型
number_field_tag(要素名, value値=nil, オプション={})
“`

が number_field_tag の型です。

“`ruby: step
number_field_tag ‘price’, nil, step: 1
“`

## 早見表
### step: 1 を設定
“`ruby: step
number_field_tag ‘price’, nil, step: 1
“`
**満たさない場合の結果**
![number_field_tag_1.png](https://qiita-image-store.s3.ap-northeast-1.a

元記事を表示

電気圧力鍋レシピ投稿サイトを作成した話 (TypeScript/ React / Ruby on Rails / AWS / Docker)

# PressurePot Recipes
電気圧力鍋を使ったレシピを投稿することができるアプリケーションを作成しました。

サイトURL:~~https://web.pp-recipes.com~~
公開停止しました。(2024.2.15)
GitHub:https://github.com/skysky0208/cooker_recipe_app

ゲストアカウント
メールアドレス:test@test.com
パスワード:password

## 1. 背景

このアプリケーションを作ろうとしたきっかけは、自身が電気圧力鍋にはまっており、レシピを探そうとした時にふと感じた課題を解決したいと感じたためです。
その時に感じた課題が以下になっています。

– 普通のレシピと圧力鍋のレシピが混じっていて探しにくい
– 普通のレシピを検索する際と見る視点が異なる
– 圧力鍋のレシピを探すときは、圧力鍋に材料を入れるまでの調理とボタンを押した後の加圧にプロセスが分かれる
– 電気圧力鍋の強みとして、この前半の調理のみでほぼ料理が完了する
– そのため、鍋

元記事を表示

【Rails】session[:user_id]とは

# session[:user_id]とは
`session[:user_id]`は、セッションにユーザーIDを格納するための方法です。セッションは、Webアプリケーションでユーザーの状態を維持するための仕組みであり、クライアントとサーバーの間で情報を保存するために使用されます。

具体的には、`session[:user_id]`は、ユーザーがログインしたときにセッションにユーザーIDを保存し、ログアウトするまでそのユーザーが認証されていることを示します。これにより、ユーザーのログイン状態を保持し、適切なユーザーに関連付けられたデータや機能にアクセスできるようになります。

# 使用方法
例えば、以下のようにしてユーザーIDをセッションに保存することができます:
“`rb
session[:user_id] = @user.id
“`
そして、以下のようにしてセッションからユーザーIDを取得することができます:
“`rb
user_id = session[:user_id]
“`
セッションは一般的に、クッキーなどのメカニズムを使用してクライアントのブラウザに保存されます。

元記事を表示

未経験エンジニアがハッカソンに出場した理由

# 概要
RUNTEQというプログラミングスクールで知り合った方とチームを結成してハッカソンに参加してきました!!

メンバー紹介

参加者 2名
・chihiro
私は今も大手カレーチェーンで生活費を稼ぎながらエンジニアになる夢を叶えるために学習を続ける未経験エンジニアです。

・若きエリートエンジニアくん 
スクールの同期中で一番最初にエンジニアになったスーパーエリートくんです。(ほんと尊敬)

以上、2人で出場しました。本当はもう一人出場する予定でしたが当日高熱を出してしまいました。とほほ…
人間体調が一番大切!まあ、こんなトラブルがありながら気合いで乗り越えました。

# qiitaハッカソンとは
今回私たちが出場したのはQiitaが主催している今年初めて開催された大会です。
ハッカソンという言葉はハック(hack)とマラソン(marathon)を合わせた混成語のことです。
題材は当日発表、1.5日でプログラミング言語を用いた作品を作成、プレゼンテーションを行い審査、決勝出場者が決まります。

# サービス概要
「Rails bridge」
Railsに

元記事を表示

railsでGeminiを使って遊んでみた忘備録

節分に出てくる鬼。
鬼と言えば、鬼のパンツ。
鬼のパンツといえば、鬼のパンツはいいパンツ。

だがいいパンツとは誰が判定しているのか。
AIに判定してもらいましょう〜

ということで、APIを使って遊んでみたいなと、ちょっと時期過ぎてる気はしますが節分と絡めてGeminiPro使ってみました。

GeminiProを選んだ理由は無料でアクセスでき、1分あたり最大60クエリが利用可能とのことだったので、無料のうちにやってみました。2024年初頭までは無料とのことでしたが、参考にする際には公式で確認してください。

基本的には公式に書いてあるこテキストと画像入力の箇所を参考にしました。
https://ai.google.dev/tutorials/rest_quickstart

早速実装していきますが、conrtollerやmodelの細かいところはすっ飛ばします。
というのもPhoto DBにはimageとgemini_textの2個のカラムのみなので。

“`ruby
# controller

def create
@photo = Photo.new(p

元記事を表示

【Rails】インスタンスメソッドの定義

# インスタンスメソッドの定義
Railsにおけるインスタンスメソッドの定義は、Active Recordモデルやコントローラーなどのクラス内で行われます。これらのクラスはRubyのクラスであり、インスタンスメソッドを定義することができます。

例えば、Active Recordモデル内でインスタンスメソッドを定義する方法を示します:
“`rb
class User < ApplicationRecord def full_name "#{first_name} #{last_name}" end end ``` この例では、`User`モデル内で`full_name`というインスタンスメソッドが定義されています。このメソッドは、`first_name`と`last_name`属性を組み合わせてユーザーのフルネームを返します。 コントローラー内でのインスタンスメソッドの定義も同様です: ```rb class UsersController < ApplicationController def show @user = User.find(params

元記事を表示

OTHERカテゴリの最新記事