Rails関連のことを調べてみた2022年06月03日

Rails関連のことを調べてみた2022年06月03日

Ruby on railsでActive Strageを導入する

## はじめに
今回は、ファイルアップロード機能を簡単に実装できるGemであるActive Strageの導入について記事を残しておこうと思う。ActiveStrageを使用すると、画像などのアップロードを簡単にするメソッドを使用できるようになったり、保存するテーブルを簡単に作成することができる。

## ImageMagickの導入
コマンドラインから画像に処理を加えることができるソフトウェア。これをRailsで扱うには`MiniMagick`というGemが必要。
“`terminal:ターミナル
% brew install imagemagick
“`
## Gemfileの編集
`MiniMagick`と画像サイズを調整する機能を持つ`ImageProcessing`のインストールを行う。
“`ruby:Gemfile
gem ‘mini_magick’
gem ‘image_processing’, ‘~> 1.2’
“`
“`terminal:ターミナル
% bundle install
“`
## ActiveStrageをインストールする
“`termin

元記事を表示

【Rails】【Ruby】form_with で入力された値(params)を取得したい!

## はじめに
未経験からエンジニアに転職しました。
まだまだわからないことだらけですが、毎日楽しく働いています!

業務や個人開発での発見やエラー解決などをアウトプットしています。
初学者向けの内容です。

## やること
Railsの form_with で入力された値を取得して色々操作したい。
今回はサンプルとして
「form_with で入力されたID(数値)を取得して、そのID(数値)を使ってデータを操作する」をやってみる。

# 手順
~~~ruby:view
<%= form_with url: huga_huga_path, method: :patch, local: true do |f| %>

# :hoge_id がparams になる
<%= f.text_area :hoge_id, class: 'textarea' %>
<%= f.submit %>

<% end %>
~~~

![スクリーンショット 2022-06-03 8.31.51.png](h

元記事を表示

データベースの中身をrails dbconsoleで確認する方法

# 記事の内容
ターミナルでデータベースの中身を確認する。

## dbのコンソールを起動する

まずはコンソールを起動する。
“`
$ rails dbconsole
“`

コンソールが起動。
“`
sqlite>
“`

## コンソールからデータベースの内容を確認

テーブル一覧を表示。
“`
sqlite> .table
ar_internal_metadata schema_migrations users
“`

指定したテーブルの構造を確認。
“`
.schema users
CREATE TABLE IF NOT EXISTS “users” (“id” integer PRIMARY KEY AUTOINCREMENT NOT NULL, “email” varchar NOT NULL, “crypted_password” varchar, “salt” varchar, “last_name” varchar NOT NULL, “first_name” varchar NOT NULL, “created_at” dat

元記事を表示

【初期化】データベースの内容をまっさらな状態にしたい

簡単な内容ですが、記事にします。

## 【やりたいこと】DBの内容をリセットしたい
“`
$rails db:reset:migrate
“`
マイグレーションファイルが古い順から全て実行されるので、DBの中身が削除され、DBが復元された状態になる。
DBのカラムが大量にある場合などDBの把握が怪しい場合など上記のコマンドを使用する。

“`
$ rails db:reset
“`
Schema.rbのデータを元にDBを作り直すので、schema.rbの状態で復元されて問題なければ上記のコマンドを使用する。

参考
https://easyramble.com/difference-bettween-rake-db-migrate-reset.html
https://railsguides.jp/active_record_migrations.html

元記事を表示

Ruby on railsのサーバー強制終了

## 環境
Ruby 2.6.5
Rails 6.0.0
## 状況
Railsで開発中に何度もやってしまったミス。ローカルホストのサーバーを立てている時に間違えてターミナルのタブを消してしまって、ctrl+cでの終了ができなくなり、再度`rails s`をしてもサーバーの立ち上げができない・・・と言う状況。これは強制終了することで解消するので、対処法についてまとめる。
## エラー表示
“`terminal:ターミナル
A server is already running. Check /home/user/original_application/lbr/tmp/pids/server.pid.
“`
## `プロジェクト名/tmp/pids/server.pid`のファイルを確認する
“`terminal:プロジェクト名/tmp/pids/server.pid
1 1650
2
“`
このPIDの値をkillすればよい
“`terminal:ターミナル
% kill 1650 #ファイル内に表示されていたPID
“`
以上で強制終了が完了する。
## ポート番号がわ

元記事を表示

carrierwaveで動的に画像サイズを変更する

## 結論

– 結論としては自作でメソッドを追加し、そこから標準の加工メソッドにサイズを指定して渡すようにする(今回はmodel classに値を渡してそこから取得するようにしました)

“`app/models/user.rb
class User < ApplicationRecord mount_uploader :image, ImagesUploader attr_accessor :width, :height end ``` ```app/uploaders/images_uploader.rb class ImagesUploader < CarrierWave::Uploader::Base include CarrierWave::MiniMagick ## 独自メソッドでサイズを指定できるメソッドを作成してそれをprocessで呼び出す def dynamic_resize_to_fil resize_to_fill model.width, model.height end process :dynamic_re

元記事を表示

【Rails】csvファイルをインポート→整形してDBに保存する

# やりたいこと
csvファイルをアップロードして、必要なデータを抽出し、DBに保存
データが重複している際は既存データにアップロードしたデータを上書きする

# 前提条件
rails7系
DB作成済み

# 実装手順

### ① gemを追加

“`Gemfile
gem ‘roo’
“`

Gemfileにcsvを読み込むためのgemを追加し、bundle installする。

### ② ルーティングの設定

“`config/routes.rb
get ‘data_upload’ => ‘data_upload#index’
post ‘data_upload’ => ‘data_upload#create’
“`

### ③ 標準ライブラリを追加
“`config/application.rb
require ‘csv’
“`

### ④ viewにアップロード用のformを作成
Rails5.1より導入されたform_withを使ってアップロード用のフォームを作成します。
指定したpathに対してpostリク

元記事を表示

sitemap generator + jsonでサイトマップ生成

SEO対策でサイトマップをGoogleに登録するため、サイトマップを生成することにしました。
ただ、Next.jsのSSRでサイトを実装していて
インデックスさせたいページの件数が膨大(50万件くらい)だったので、手動で作るのは無理です。

Railsで「sitemap generator」という便利そうなgemがあったので、
こちらを使ってサイトマップを生成してみます。
インデックスさせたいURLは、jsonで下記のような形式で用意しました。

“`json
{
{“id”: “123456”}
{“id”: “234567”}
}
“`

まずgemをインストール。

“`
gem install sitemap_generator
“`

`sitemap.rb`というファイルを作成し、下記の内容を記述します。

“`ruby:sitemap.rb
require ‘rubygems’
require ‘sitemap_generator’

## 空配列を用意
idList = []

## jsonデータからidの値を読み込む処理を書く(本記事では割愛)
#

元記事を表示

NoMethodError in ~#index (エラーの確認・対処)

# はじめに
Rails 6.0.3を使用してローカル環境にてアプリケーションを作成中にエラーに遭遇しました。本当に初歩的なミスですが、今後よく遭遇するであろうエラーとのことでしたので備忘録として記事にします。

# 環境
Ruby: 3.0.1
Rails: 6.0.3

# 設定内容
“`ruby
#controllerファイルの場所
frasse_app/app/controllers/frasses_controller.rb

#frasses_controller.rbのコード(抜粋)
def index
@frasses = Frasse.all
end

def new
@frasse = Frasse.new
end
“`
“`ruby
#viewsファイルの場所
frappe_app/app/views/frasses/index.html.erb
#index.html.erbのコード(抜粋)
<% @frasse.each do |frasse| %>

<%= frasse.con

元記事を表示

rbenv インストール

# Homebrew

“`
xcode-select –install
“`

## インストール
https://brew.sh/index_ja

“`
brew doctor
“`

“`
brew install wget
“`

# rbenv

“`
echo ‘export PATH=”$HOME/.rbenv/bin:$PATH”‘ >> ~/.bash_profile
echo ‘if which rbenv > /dev/null; then eval “$(rbenv init -)”; fi’ >> ~/.bash_profile
source ~/.bash_profile
“`

“`
rbenv install –list    # => インストール可能なバージョン一覧の表示
rbenv install 2.6.1 # => rubyのインストール
rbenv rehash # => rbenv の再読み込み
rbenv global 2.6.1 # => defaultで使うrubyのバージョン

元記事を表示

投稿機能をつける

ユーザーの方が行き詰まったので投稿機能を作成することにした。
そのためにMySQLでテーブルを作成する。
その後にモデルのファイルを作成、そこでバリデーションをかける。
その後実装する機能としては
・投稿機能
・投稿詳細ページ
・投稿一覧機能
・投稿編集
・投稿削除

# postsテーブルを作成
投稿の文章のデータ型を何にしようか?
調べてみると
“`CHAR“`,“`VARCHAR“`,“`TEXT“`とある。
どれを使えばいいのだろう?
### CHAR(固定長文字列)
何があっても宣言された文字分の領域を使う。
列に入れる文字列の長さが細田長に満たないばああい、文字列が最大長になるまで空きを半角スペースで埋めます。

出典 SQLゼロから始めるデータベース操作第二版 p35

### VARCHAR(可変長文字型)
カラムに宣言されたサイズを上限として値の文字数ぶんだけの領域を使用する。
最大長に満たさなくても、半角スペースで埋めなくてもいい。
出典 SQLゼロから始めるデータベース操作第二版 p35

大体長くなければvarchar(255)で足りる。
### T

元記事を表示

?【初学者用】RSpecでテストコードを書こう!②【簡単な実装例】

# はじめに
RSpecでテストコードを書こう!2記事目です!
①の投稿はこちら↓

https://qiita.com/hondano_gentuki/items/2003971a4f5a97481930

# テストコード書き方
Userモデルにはnameカラムとemailカラムがあるとします。
“`rails:spec/models/user_spec.rb
require ‘rails_helper’

RSpec.describe User, type: :model do
describe ‘ユーザー新規登録’ do
context ‘登録ができるとき’ do
   it ‘全ての項目が正しく入力されている時’ do
 #その処理を記述
   end
  end
context ‘登録ができないとき’ do
   it ‘nameが空では登録できない’ do
# nameが空では登録できないテストコードを記述
 end
 it ‘emailが空では登録できない’ do
# emailが空では登録できないテス

元記事を表示

save!とは?

# save!とは
・モデル保存させるもの
・既存のデータベースは更新される
# 特徴
## save!は常にバリデーションが走っている。
・常にバリデーションを走らせている。
・保存に失敗したら”ActiveRecord::REcordINvalid”が発生する。そしてレコードが保存されない。
### しかし例外も
・validate: falseを指定するとsave!のバリデーションをスキップすることが可能
## 現在時間も保存する
・デフォルトによると”save!”は現在時刻を”updated_at/updated_on”属性もを設定する。

### 例外も
・”touch: false”を指定すればこれらのタイムスタンプは更新されない。
### :touch
:touchオプションをtrueに設定すると、そのオブジェクトがsaveまたはdestroyされたときに、関連付けられたオブジェクトのupdated_atタイムスタンプやupdated_onタイムスタンプが常に現在の時刻に設定されます

出典 https://railsguides.jp/association_basic

元記事を表示

rails でTypeError can’t convert ActiveSupport::TimeWithZone into an exact numberで途方に暮れたら

rails6.1に上げる設定をしていた時に出たエラーですが、appとかconfigの下のファイルがダンプに出て来ません。
てっきり6.1の
ActiveSupport.utc_to_local_returns_utc_offset_times
関係かと思いきや、同時に調整しようとしたcookieの設定で
Rails.application.config.session_store
(略)
expires: 20.years.from_now
とすべきところを
expire_after: 20.years.from_now
としていたのが原因でした。
この設定ファイルでエラー、とは出ないので、戻すまで気がつきませんでした。
こんなやらかしは多分自分だけとは思いますが、検索しても全然ヒントがなく、しばらく途方に暮れたので恥を晒しておきます。

元記事を表示

Lintの使い方

rubocopとは慣習的でないRailsのコードを発見し、それを簡単に修正してくれる便利なツール。

rubocopの正誤表を見るには、“`EmptyLinesAroundClassBody“`でgoogle検索をかける。もしくは下のURL。

“`
https://www.rubydoc.info/gems/rubocop/RuboCop/Cop/Layout/EmptyLinesAroundClassBody
“`

Rubocopでテストを実行するにはターミナルで
“`
bundle exec rubocop
“`
を実行する。

rubocopは間違いを自動的に修正してくれるコマンドがある。
“`
bundle exec rubocop –auto-correct
“`
これでほとんどの間違いは解消してくれる。

上のコマンドでも解消してくれない例もある。例えばif文などである。
その場合は手動で修正する必要がある。

元記事を表示

accepts_nested_attributes_for で更新するモデルに対するバリデーションエラー(ActiveModel::NestedError)を外部からセットする方法

## はじめに

Railsでは `accepts_nested_attributes_for` を使って、`has_many`関連する子レコードを1つのフォームで更新することができます。
イメージとしてはこんな感じです。

![sample.002.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7465/fbd1d0e0-3c36-dcaf-715c-a787fbce39b4.jpeg)

上の画面では以下のようなBookモデルと、それに関連するAuthorモデルを更新するフォームです。
(本と著者はmany-to-many関連だろう、というツッコミが来そうですが、説明のために単純化してるので気にしないでください)

“`ruby
class Book < ApplicationRecord has_many :authors, dependent: :destroy accepts_nested_attributes_for :authors, allow_destroy: true

元記事を表示

Rails Reactのサーバー起動時のデフォルトポート番号変更(Docker不使用)

# 前提
`rails s`
`npm start`
実行時のポート番号を変えたい
※今回は特にDocker使用していません

# Rails側
“`puma.rb
– port ENV.fetch(‘PORT’) { 3000 }
+ port ENV.fetch(‘PORT’) { 4000 }
“`

# React側
PORT=希望の番号 を追記
“`package.json
“scripts”: {
– “start”: “react-scripts start”,
+ “start”: “PORT=4001 react-scripts start”,
“build”: “react-scripts build”,

},
“`

元記事を表示

Ruby on Railsをお勧めしたい理由

# 初めに
今僕はRailsのエンジニアとして生活しています
どんな感じかというと
Webアプリケーションを作って広告をつけて稼ぐ
といった具合
ちなみに今は独立というのか会社には所属しておらず家でやってます
ブログ等でこういう風に稼ぐ人もいるのですが僕は残念なことに文才がなくすぐにネタ切れになるタイプなのでアプリケーション開発をしようと思いました
その際に選んだのがRailsです

## Railsってなに?
プログラミング言語の1つという認識で大丈夫です
厳密には少々違いますがややこしくなるので割愛しますが
国産プログラミング言語であるRubyのパワーアップアイテムと思ってください
ものすごくざっくり言うと
>Webアプリケーションを簡単に作ってしまおうぜ!

って能力に長けています
Webアプリケーションとは?ってなる方も多いと思いますので例を挙げてみましょう
・Youtube
・ツイッター
・掲示板
・ククパッド
こう言うものです
ホームページではなくWebで何かしらできるものって認識でOK

# Railsって何が便利なの?
上記で僕は
>Webアプリを簡単に作ってしまおうぜ

元記事を表示

【Rails】ブラウザのタブにアイコン(favicon)を設定する

# はじめに
ポートフォリオを作成しましたが、ブラウザのタブのアイコンがないのは寂しい!!と思い、
設定方法を調べたところ、favicon(ファビコン)を設定すれば実装できることが分かり、簡単に設定できたのでアウトプットとして記録します。
今回下の画像の赤枠のアイコンを変更していきます。
![favicon](https://i.gyazo.com/ea1273055473e527dff3c0396709fac6.png)

# 環境
– Ruby 2.6.3
– Rails 6.1.5.1

# タブのアイコン用の画像を用意する
favicon用に設定するファイルを[**こちら**](https://ao-system.net/favicon/ “ファビコン作成”)で変換し作成してください。無料で半透過マルチアイコンを作成できます。
ファイルを指定し、作成ボタンを押した後、ファイルが作成されますので、ダウンロードボタンを押します。
ダウンロードしたfavicon.icoを、railsのimageフォルダに保存します。
自分は16×16用画像ファイルで変換し作成しましたが問題無く反映

元記事を表示

Topページを絞り込みたい!

# 【Rails】Topページを絞り込むページ作成!
## はじめに
本記事ではTOPページで検索したものを他ページで表示するコードを記載しています

## 前提

– 記事のテーブルはtweets
– tweetsで検索する文字列はbody
– indexページ(index.html.erb)に検索フォーム、searchページ(search.html.erb)検索結果を表示
# 手順
## search.html.erb作成
↑の名前のファイルを自分のテーブル名のViewファイルの中に作成しましょう!
その中に一度自分のindexページ(index.html.erb)をコピペして入れておきましょう!
何かindexページと違う文字など入れておくとわかりやすいです?

## ルーティング設定
“`ruby:config/routes.rb
get ‘search’ => ‘tweets#search’
“`
## 検索フォーム作成
“`erb:index.html.erb

<%= form_with url: sea

元記事を表示

OTHERカテゴリの最新記事