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

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

【rails】Herokuに画像が表示されない

# はじめに

– `assets/images/logo.jpeg` に画像を保存し,imgタグにてパスを参照してブラウザ表示を試みた。
– 上記ローカル環境にて表示することはできたが、“heroku“にデプロイした環境では表示させることができなかった。

# やったこと

– 拡張子が `jpeg` になっていた→ `jpg` に修正する。
– `img` タグで記述を `image_tag` に修正する。
– `assets/images/x_logo.jpg` で絶対パス指定していたものを、 `x_logo.jpg` の形で相対パスに変更する。
– 修正後のコード↓

“`ruby
.login
.text-center
= image_tag ‘x_logo.jpg’ ,alt: ” ,width: ’60’ ,height: ’57’
h3.text-center サインアップ

“`

# 結果

– 開発環境、Heroku本番環境の両方でアイコンの画像を表示させることができた。

# 参考

https://qiita.com/jnchito/

元記事を表示

【rails】viewの共通applicationを切り分ける

# やりたいこと

– deviseを用いたログイン、サインアップ画面と通常のメイン画面とで、共通のviewを切り分けて表示させたい。
– (例)メニューヘッダー,サイドバーはログイン画面には表示させたくない

# やったこと

1. ユーザー認証用のHTMLを作る

2. ApplicationControllerに描画の切替を制御する記述をする

ユーザー認証用のHTML(ファイル名は任意)のファイル名で作って、`app/views/layouts/`配下に作る

※`app/views/layouts/devise.html.erb`で作るとします

devise.html.erb

“`jsx



Sample
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'rel

元記事を表示

【rails】.envファイルに環境変数を設定する

# はじめに

– 外部に公開したくないpasswordなどを環境変数として `.env`ファイルに設定する。
– githubにコミットした際に、 `gitignore` ファイルに.envファイルを指定することで、パスを外部に公開されないようにすることができる。
– 上記の手順を簡単に下記へまとめる。

# 手順

– detenvを `Gemfile` にインストール

“`jsx
gem ‘dotenv-rails’
“`

– `.env` ファイルに外部に公開したくないIDやpassを記述する

“`jsx
LOGIN_NAME=’name123′
LOGIN_PASSWORD=’pass123′
“`

– 上記を `環境変数` として他のファイルから呼び出す際は以下のように記述する

“`jsx
ENV[‘LOGIN_NAME’]
ENV[‘LOGIN_PASSWORD’]
“`

– Githubに.envファイルがコミットされないように `.gitignore` ファイルに以下を追加

“`ruby
/.env
“`

# 参考

https://q

元記事を表示

【rails】OAuthを用いて、GitHub認証ログイン機能を実装する

# やりたいこと

– deviseのomniauthableの機能でgithubログインを実装する
– [ログイン](http://localhost:3000/users/sign_in),[サインアップ](http://localhost:3000/users/sign_up)からgithubログインができるようにする。

– 挙動
– サインアップ、ログイン画面より「GitHub認証」のボタンを押下
– GitHubのログイン画面へ遷移しid,パスを入力しログインボタンを押下
– github上で認証するためのトークンを発行し、それをWebサイト側で検証
– 上記が認証されるとトップ画面へ遷移する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265379/515b9f63-e3b8-c9e4-0d21-6a0f981afc17.png)

# 調査

– 必要なこと
– omniauthableの実装に必要なge

元記事を表示

erbファイルでemmetが効かなくなった

## emmetが効かない・・・
vscodeでerbファイルにdiv.containerなどを途中まで入力してtabキーを押しても自動補完されなくなってしまった・・・

## Ruby LSPを有効化したら
拡張機能のRuby LSPが無効になっていたので、有効化→再起動
[![Image from Gyazo](https://i.gyazo.com/88f5734f6fa8a085f59ce72c75fa845b.png)](https://gyazo.com/88f5734f6fa8a085f59ce72c75fa845b)

無事にemmetが使用できるようになりました!!

元記事を表示

DateTimeのズレ

# sqlで範囲検索するとずれる
“`rb
irb(main):073:0> a = DateTime.now
=> Fri, 10 May 2024 00:45:56 +0900
“`
“`rb
irb(main):076:0> Model.where(created_at:b .. a)
Model Load (0.5ms) SELECT `models`.* FROM `models` WHERE `models`.`created_at` BETWEEN ‘2024-05-03 00:00:00’ AND ‘2024-05-09 15:45:56.557590’
=> []
“`
“`Fri, 10 May 2024 00:45:56 +0900“`が“`’2024-05-09 15:45:56.557590’“`になっている。

9時間前になる。
“`+0900“`が9時間前になっているからだと思う。“`+0000“`すると時差が解消される

“`rb
irb(main):078:0> a = “#{DateTime.now.to_date}

元記事を表示

Ruby extendについて

# はじめに

#### ※以下の内容には誤りが含まれる可能性があります

# extendとは何か

extendとはモジュールのメソッドを使用するためのメソッドです。

クラスの中でモジュールを呼び出すときに使います。

その際extendはクラスメソッドとして読み込む。

# extendの使い方

“`
module cat
def name
“ミケ”
end
end

class Animal
extend Cat
end

p Animal.name
“`

includeメソッドとの違いはクラスメソッドとしてモジュールがインクルードされる点です。

# まとめ

– extendはモジュールを使用するためのメソッド
– extendeはクラスメソッドとして読み込む

元記事を表示

Example title

# Example

元記事を表示

Example title

# Example

元記事を表示

Railsの日本語化

## バージョン
Ruby:3.1.4p223
Rails :7.0.8.1

## 手順
1. 複数言語に対応させるため”rails-i18n”というGemを導入
2. “ja.yml”ファイルを作成
3. application.rb内に設定を記述

### 1.複数言語に対応させるため”rails-i18n”というGemを導入
rails-i18n は、Railsアプリケーションで国際化(i18n)をサポートするためのGemで。
国際化とは、アプリケーションのテキストやメッセージを複数の言語に対応させるためのプロセスのことで、このGemを使うことで、Railsアプリケーションで多言語サポートを実装するための便利な機能が提供されます。

“`ruby
gem ‘rails-i18n’
“`

### 2. “ja.yml”ファイルを作成
**config➡locals➡配下に”ja.yml”を作成**

“.yml”はYAML(YAML Ain’t Markup Language)形式のファイル拡張子。

“ja.yml”ファイル

元記事を表示

【ザックリ概要】ActiveRecordの基礎

※解釈が入り混じっているので不備などがあるかもしれません。予めご了承ください。
※ザックリと理解するというスタンスなのでまとめ方が不十分かもしれません
***
引用元・参考サイト
[Railsガイド](https://railsguides.jp/active_record_basics.html)
***
# 概要
– `Active Record`はMVCのMを相当する『オブジェクト指向 × DB操作』を可能にした仕組み
データ操作をオブジェクトを介して実現可能にしている
– ORMというシステム設計パターンを採用しており、ORMではDBの種類ごとのSQLの記述の違いを吸収してくれるなど”互換性が高い”のが大きな特徴
– `Active Record`は次のような特徴を持つ
– 先述したSQLでのDB操作をオブジェクトを介して実行可能な点に加えて、『RDBのような”テーブル同士の相関”などよりDB寄りなデータの意味までもオブジェクトで表現できる』
> ・モデルおよびモデル内のデータを表現する[^1]
> ・モデル同士の関連付け(アソシエーション)を表現する[^1]

元記事を表示

【ruby】timesを使った繰り返し処理

timesを使った繰り返し処理です。

“`ruby
greeting = ‘Hello world’
n = 5
n.times do
puts greeting
end

“`

実行した結果です。

![kekka.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710584/a66ee55e-e680-6c13-77a2-d9eb3b9cf966.jpeg)

元記事を表示

【Rails】RSpec便利なカスタマイズ

# カスタマイズ一覧
“`spec_helper.rb
RSpec.configure do |config|
# 1
config.filter_run_when_matching :focus

# 2
config.example_status_persistence_file_path = “spec/examples.txt”

# 3
config.disable_monkey_patching!

# 4
if config.files_to_run.one?
config.default_formatter = “doc”
end

# 5
config.profile_examples = 10

# 6
config.order = :random

# 7
Kernel.srand config.seed
end
“`

## 1. 特定のテストのみ実行する方法
### 方法1
“`terminal
// rspec ファイルパス:行数
$ rspec spec/models/user_sp

元記事を表示

GroveBeginnerKit を、C++(Arduino)とRuby(ラズパイ,Rboard) で使う I2C – OLED(SSD1315) 編

[しまねソフト研究開発センター](https://www.s-itoc.jp)(略称 ITOC)にいます、東です。

[Grove Beginner Kit for Arduino を使ってみる記事](https://qiita.com/HirohitoHigashi/items/dc43ea72d572b21a6823)の第7回、最後は I2C 接続の OLED ビットマップディスプレイを題材にします。

このレポートでは、今まで通り

「メーカーのデータシートを見て、ICを直接コントロールをすること」

を、方針とします。しかしながら、今までのセンサー類と違いディスプレイコントローラは桁違いに設定項目が多く扱いが難しいです。通常ですと既存ライブラリを使うのが当たり前になると思いますが、学習用の記事という性質上ライブラリは使わずにコントロールします。[^1]

ターゲットは、以下の通り。
* Arduino - 付属の Arduino Uno 互換機
* Ruby – Raspberry Pi + [Grove Base HAT for Raspb

元記事を表示

railsでのお作法について纏めてみた

## 対象読者
– railsを初めて触る人
– 簡単なCRUD、ルーティングまでを一つの記事で理解したい方
– apiとwebのエンドポイントを共存させるほう法を知りたい方

元記事を表示

Ruby Silverの勉強をして良かった点

転職活動中のRubyエンジニアです。
自分の経験を棚卸した際に、Ruby Silverの勉強をしておいて良かったなと思いました。
せっかくなので何が良かったかを紹介します。

## 「インスタンス変数のセッターメソッド呼び出しになぜレシーバの明示が必要か」がわかった

nameとageのカラムを持つusersテーブルと対応するクラスを以下のように実装したとします。

“`app/models/user.rb
class User < ActiveRecord::Base def set_attributes(name, age) # ↓レシーバを明示する self.name = name # ↓レシーバを明示しない age = age end end ``` set_attributesメソッドでnameとageに値をセットできるつもりですが、いざ実行すると以下のようになります。 ```rb u = User.new u.set_attributes('Taro', 25) u.name #=> ‘Taro’
u.age #=> nil
`

元記事を表示

ancestry gemで発生するN+1問題の解決法

# はじめに
Railsで階層構造を持つデータモデルを扱う際に使用する`ancestry` gem。便利なメソッドが準備されている反面、そのまま使用してしまうとN+1を起こしパフォーマンス的に良くない状態になってしまったので、どうやって解決したかを説明します。

## TL;DR
`ancestry` gemを使用して親子関係を扱う際に、メソッドを使わず自己参照のリレーションを利用することでN+1問題を解消できます。

# 環境
Ruby 3.3.0
Rails 7.1.3.2
ancestry 4.3.3

## 親子関係とN+1問題の例
`ancestry` gemを使うと、カテゴリーのような階層構造を持つモデルを簡単に作成できます。例えば、以下のようにCategoryモデル単体で階層化されたモデルを例に考えます。

“`ruby
# category.rb
class Category < ApplicationRecord has_ancestry end ``` N+1を起こす原因箇所 ```erb -# index.html.erb

【個人開発】VTuberの発見と布教が出来るWebアプリを作りました

# はじめに
初めてのWebアプリケーション開発をしてみました。
名前は`にゅーぶい!`です。

https://newvtuber.com/

どのようなものか書きます。

# どのようなアプリか
### 簡単な紹介
ファンは自分がまだ知らないVTuberの発見と布教、VTuberはファンの獲得が出来ることを目指したサービスです。

### 想い
VTuberという文化が生まれてから久しく、現在では数えきれないほどVTuberがいます。
そのため、自分のタイプや好みに合うまだ知らないVTuberがきっと多くいます。
そこで、VTuberのプロフィール閲覧/作成を行えるサービスがあれば、より楽しい推し活に繋がると思い、本アプリの開発をしました。

# 使い方
### 文字のみ
一部ユーザー登録の必要なものがありますが、登録やログイン等の記述は割愛します。
最低限の使い方は下記の2つです。
① 一覧から気になるVTuberを押す
② プロフィールを見る
上記に加えて、下記の使い方もすると少し豊かになります。
・ ご自身の好きなVTuberのプロフィールが無い場合は作成する

[Rails]タスク管理アプリ(Part.1)

## はじめに

Railsでタスク管理アプリを作成します。
利用する各ツールのバージョンは以下とします。
|ツール|バージョン|
|-|-|
|Ruby|3.2.4|
|Ruby on Rails|7.1.3.2|
|PostgreSQL|16.2|

## アプリケーションのひな型を作成する

アプリケーションのひな型を作成します。
実行には少し時間がかかります。
“`bash:
rails new taskapp -d postgresql
“`

実行が完了したらアプリケーションフォルダに移動します。
“`bash:
cd taskapp
“`

データベースを作成します。
“`bash:
bin/rails db:create
“`
2つのデータベースが作成されました。
>$ bin/rails db:create
Created database ‘taskapp_development’
Created database ‘taskapp_test’

サーバを起動します。
“`bash:
bin/rails s
“`

以下にアクセスします。

htt

【Rails】データベースに反映済みのマイグレーションファイルの修正方法

マイグレーションファイルを作成して, rails db:migrate し, あとからカラム名のタイポに気づきました

“`db/migrate/20240502121245_create_checkouts.rb
class CreateCheckouts < ActiveRecord::Migration[7.0] def change create_table :checkouts do |t| t.string :fisrt_name # first_name としたかった t.timestamps end end end ``` rails db:migrate していない場合は, そのままマイグレーションファイルを編集すればよいですが, すでにしている場合はデータベースに反映されているため, ロールバックをする必要があります。 反映されているかは rails db:migrate:status で確認できます。up になっていれば反映済み, down になっていれば未反映です。 今回は以下のように up