Rails関連のことを調べてみた2021年12月20日

Rails関連のことを調べてみた2021年12月20日
目次

migrationのrollbackの注意点(dafault値の取り扱い)

# TL;DR
migrate後のmigrationファイルを書き換えると、データの値が荒れがち。
rubocopに「直したほうが良い」と言われようとも、migrationファイルは書き換えないのが基本。
(自戒の念を込めて記事化)

# 状況
rubocopで静的解析をかけた時のお話。
こんな表示が出ました。

“`ruby:rubocop実行画面
db/migrate/20210827131348_add_activations_to_users.rb:9:5:
C: Rails/BulkChangeTable:
You can use change_table :relationships, bulk: true to combine alter queries.
“`

「add_columnを何度も重ねずに、add_tableで一括変更してくれ」とのことなので、
そのように変更。

# やったこと

“rails db:migrate:status” => ID確認。
“rails db:migrate:down VERSION=xxxxxxx” => downに

元記事を表示

【Rails】GETでリクエストボディを利用しない方がよい理由

# はじめに

Web APIを開発する場合、必要なパラメータを取得する方法はいくつか存在します。

1. URLパラメータ
1. リクエストヘッダ
1. リクエストボディ

> リクエストの最後の部分が本文です。本文が存在しないリクエストもあります。リソースを取り込むリクエストである GET, HEAD, DELETE, OPTIONS は通常、本文は不要です。サーバー内のデータを更新するためにデータを送信するリクエストもあり、 POST リクエストでよくあります (HTML フォームのデータを持つ)。

参考: https://developer.mozilla.org/ja/docs/Web/HTTP/Messages#body

# GETでリクエストボディを利用したらどうなるか

そもそもGETメソッドはリソースを取り込むリクエストであるため、リクエストボディを用いなくても要件を実現できるはずですが、実装次第ではリクエストボディを用いることができてしまいます。
ここでは、GETメソッドでリクエストボディを利用した場合のケースを解説します。

## 実例

実際の開発現場で書か

元記事を表示

【個人開発】居酒屋で「すいませーん」という声が通るかを、文字起こしAPIで判定する

# はじめに
居酒屋で店員さんを呼ぶ声が通らず、恥ずかしい思いをしたという経験はありませんか?
そんな日常の悩みを解消するため、自宅にいながら店員さんを呼ぶ練習ができるアプリを開発しました。

本記事では、「騒音の中で声が通るかどうかを判定する技術」について解説します。


# 1. サービス紹介
– タイトル: 『すいませんチェッカー』
– URL: https://suimasen.jp/
– ソースコード: https://github.com/masa-oh/suimasen/

※現在はPCのみ対応しており、スマートフォンは非対応です。
![suimasen_ogp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/780389/b8a96122-6c41-eff1-1746-afd88ba94e2a.png)

– 遊び方
– 初めにステージを選びます。
– マイクボタンを押して、「すいませーん」と店員さんを呼びます。
– 判定結果が表示さ

元記事を表示

RubyMineをさらに便利にするプラグインたち:2021年版

# はじめに
[Ateam Commerce Tech Inc. Advent Calendar 2021](https://qiita.com/advent-calendar/2021/ateam-commerce-tech)の20日分です。
本日は@hibiheionが担当します。
業務では主に自転車ECサイト[cyma](https://cyclemarket.jp)のバックエンドの機能をRailsで書いています。

# RubyMineとのかかわり
RubyMineはJetBrainsが提供しているRubyが得意なIDEです。
cymaのバックエンドは数年前にRailsへリプレースしたのですが、その頃から愛用しています。
最近はTypeScriptやReactといったフロントエンド系の開発への関わりも出てきてRubyMineではつらいのではないかという懸念もあったのですが、そういったものに対してもコード補完などは効いて問題なく開発できました。
このあたりは多彩なIDEを作っているJetBrainsの面目躍如といったところかもしれません。

# RubyMineのプラグイン

元記事を表示

環境構築の素人がRailsの環境をWIndows11PCに作ってみた

この記事はエイチーム引越し侍 / エイチームコネクトの社員による、[Ateam Hikkoshi samurai Inc.× Ateam Connect Inc. Advent Calendar 2021](https://qiita.com/advent-calendar/2021/hikkoshizamurai-connect) 20日目の記事です。

# はじめに
僕は環境構築が素人なphperです。
そんな僕がそろそろRuby on Railsでも覚えようかなと思い立ち、環境を用意した中で、環境構築をよくわかっていない素人だからこそ簡単な事にハマってしまいました。
そんな悲しみを1人でも減らすため、僕と同じような素人が何となく環境を作る事ができるようにお手伝いできたら幸いです。

# 調べるにあたっての不安
まず環境構築をしようと調べる中で、Windows11での環境構築に関する記事はあまり見つからないのではないでしょうか?
リリースされてから、まだそれほど期間もたっていないので当然といえば当然ですね。
でも安心してください!
僕がやってみた所感なのですが、先人がWindows

元記事を表示

Windows11とWSL2で始めるWebシステム開発

## はじめに

こんにちは。ディップ株式会社ではたらいてる@Payayayayaです。

Web系システム開発といえばMacみたいなイメージがあると思いますが(偏見)、
Windows11でより進化したWSL2を使えばWindowsでのWeb系システム開発も結構イケる感じなので紹介します。

**Windows11 + WSL2環境でDocker使ってRailsアプリを作成してHerokuにデプロイ**してみます。

### 必要なPC要件

– Windows11がインストールされている([バージョン確認方法](https://support.microsoft.com/ja-jp/windows/%E4%BD%BF%E7%94%A8%E4%B8%AD%E3%81%AE-windows-%E3%82%AA%E3%83%9A%E3%83%AC%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0-%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%8

元記事を表示

Rails 6.1 の Renderable objects で薄い View をお手軽に脱 ERB する

こんにちは。 Qiita Team の開発に参画している @tomoasleep です。
巷では、Rails 7 で盛り上がってますが、今回は Rails 6.1 で導入された Renderable objects についての紹介と、開発での応用例について話していきたいと思います。

## Rails 6.1 で `render` に `#render_in` を実装したオブジェクトを渡せるようになった

Rails 6.1 では以下のように、View や Controller の render メソッドに `render_in` を実装したオブジェクト (Renderable object) を渡すことができるようになりました。

“`erb

Header

<%= render HelloComponent.new %>
“`

“`ruby
class HelloComponent
def render_in(view_context)
# view_context を介して helper method などの view で使える method

元記事を表示

【Rails】enumの実装方法(日本語化)

## はじめに
 本記事は、プログラミングの学習を始めて1ヶ月の初学者が、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
 そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
 間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。

## enumの実装方法

“` ’Gemfile’
gem “enum_help”
“`

ターミナル

“`
bundle install
“`

モデルにenum定義

“`sample.rb
enum payment_method: { credit_card: 0, transfer: 1 }
“`

日本語化のために以下記述

“`config/application.rb
config.i18n.default_locale = :ja
config.i18n.load_path += Dir[Rails.root.join(‘config/locales/*.yml’).to_s]
“`

“`config/locales/ja.yml
ja

元記事を表示

ページネーションにkaminariを使う

ページネーションとは、検索結果を表示するページや記事がたくさん投稿されている場合など、ボリュームの多いWebページを複数のページに分割し、各ページへのリンクを並べることで見やすくすることです。

# 1. kaminariをbundle install
以下のコードをGemfileに記入して`bundle install`

“`Gemfile.
gem ‘kaminari’
“`

# 2. コントローラでの設定

kaminariをインストールすることによって`.page(params[:page]).per(5)`が使用できるようになります。1ページあたり何件表示するかは`.per(5)`の値を変更してください。

“`posts_controller.rb
@posts = Post.all.page(params[:page]).per(5)
“`

# 3. viewページへ挿入
各リンクへのリストを表示したいところに以下のコードを挿入します

“`posts/index.htmnl.erb
<%= paginate @posts %>
“`

# 4.

元記事を表示

【Rails】Gemfileのgemバージョン指定

####初めに
Gemfileにgemを記入する際に、バージョン指定の書き方がいまいち理解できていなかったので、まとめてみました。

####gem記入方
“`
gem ライブラリ名 ,バージョン
“`

####バージョン指定

◆“1.0.0“
バージョンを固定。

◆“>= 1.0.0“
1.0.0以上のバージョンが必要。

◆“>= 1.0.0, < 2.0.0`` 1.0.0以上、2.0.0未満のバージョンが必要。 ◆``~> 1.0.0“
1.0.0以上で利用可能で、1.0.9などは問題なく、1.1にバージョンが上がると利用不可になる。

◆バージョン指定無しの場合は、常に最新版をインストール。

####参考記事
[【Rails】Gemfileのバージョン指定の書き方](https://blog.yuhiisk.com/archive/2017/04/24/specify-the-version-of-gemfile.html)

元記事を表示

【Rails】日本語化のやり方

##手順
①gem ‘rails-i18n’をインストール
②デフォルトの言語を日本語に設定
③複数のロケールファイルが読み込まれるようpathを通す
④新しいファイルを作成

####①gem ‘rails-i18n’をインストール

“`
#Gemfile
gem ‘rails-i18n’, ‘入れたいバージョン’
→ bundle install
“`

####②デフォルトの言語を日本語に設定
config/application.rbに
“`config.i18n.default_locale = :ja“`を追加。

“`
class Application < Rails::Application  #以下の記述を追記する  #デフォルトのlocaleを日本語(:ja)にする  config.i18n.default_locale = :ja end ``` ####③複数のロケールファイルが読み込まれるようpathを通す 先程の②と同様にconfig/application.rbに ``` config.i18n.load_path += Dir[Ra

元記事を表示

herokuで急にrailsがdeployできなくなった

# 起こった事象

– 急にherokuでrailsがdeployできなくなった
– メールで「Automatic deployment of app名 failed.」とくる
– 構成は下記
– rails6
– webpacker 4.3.0

# 対処

結論から言うとherokuのnodeのversionが上がってwebpackerで使っていたnode-sassのversionが対応しなくなってdeployできなかった

対処法としては下記

– webpackerのversionを上げて現在のherokuのnodeに対応したものにする
– herokuのnodeのbuild packを入れてversionを指定する

後者が楽だがwebpackerが古すぎたのとwebpackerで使っているnode-sassがもう非推奨になっていたためこの機会にwebpackerをversionアップしてnode-sassも消そうと思った。

## webpackerのversionアップ手順

苦しんで覚えるwebpackerのバージョン更新
https://zenn.dev/t

元記事を表示

Ruby/Railsで画像に文字を入れ込む

こんにちは。エンジニアのronです。

SmartHRは、Rubykaigi 2021 Takeoutでスケジュールアプリを提供しました。
https://tech.smarthr.jp/entry/2021/11/02/204403

実はその中で、スケジュールページで設定した一言コメントがOGPに反映されるようにしていました。
これは、Twitterで自分の視聴予定をシェアしてワイワイ盛り上がってほしいという気持ちから実装したものです。

![スクリーンショット 2021-12-18 13.56.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87285/a9252262-b996-5e2d-08cc-9761190ac618.png)

今回は、どうやって画像の生成を行っているのかを解説していきたいと思います。

## 画像の生成方法
Rubyで画像を生成する方法はいくつかあります。
– imagemagick
– Thinreports
– wkhtmltoimage
などが候補になりま

元記事を表示

【Rails】deviseで複数モデル設定した時の遷移先変更方法【初学者の疑問点を簡潔に解説】

## はじめに
 本記事は、プログラミングの学習を始めて1ヶ月の初学者が、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
 そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
 間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。

## deviseで複数モデル設定時の遷移先の変更方法

“`application_controller.rb
class ApplicationController < ActionController::Base # ログイン後のリダイレクト先 def after_sign_in_path_for(resource_or_scope) if resource.is_a?(Admin) admin_orders_path else root_path end end # ログアウト後のリダイレクト先 def after_sign_out_path_for(resour

元記事を表示

そうだ、Batch処理を使おう!【Rails】【タグ機能】【Whenever】【cron】

# はじめに
こんにちは!DMM WEBCAMP Advent Calendar 2021 :christmas_tree: 19日目を担当させていただく@smasa1112です!

今回で初のqiita投稿ですのでお見苦しいところ多々あるかと思います
どうか温かい目で見守っていただけますと幸いです…

本日は初学者の方が中級者になるときに使うであろうBatch処理とそれを有効に使えるであろうタグ機能に関連することを書いていきます!

## 目次
1. [Batch処理とは](#anchor1)
1. [目標](#anchor2)
1. [完成系](#anchor2-1)
1. [ER図](#anchor2-2)
1. [実装](#anchor3)
1. [使用環境](#anchor3-1)
1. [タグ機能の処理](#anchor3-2)
1. [Batch処理](#anchor3-3)
1. [最後に](#anchor4)
1. [参考記事](#anchor5)

元記事を表示

RailsでFace APIを扱うので噛み砕いてみた◎

## はじめに
RailsでFace APIを扱う記事が少なく実装に一手間かかってしまったので、
初歩的ですが今後同じように開発する方がスムーズに実装できるようにこの記事が手助けになれば幸いです!m(_ _)m

## この記事に期待できること

– RailsでFace APIを扱うためのコードを理解できる
– リクエストするデータについての理解が深まる(おまけ)

前提としてREST APIについての知識があればより理解してもらえると思います。

## Face APIについて
本題に入る前にFace APIとは?の説明をしておきます。

Microsoftが提供するAzure APIと呼ばれるサービスの一つです。

公式サイトは[こちら](https://azure.microsoft.com/ja-jp/services/cognitive-services/face/)
Face API詳細については[こちら](https://westus.dev.cognitive.microsoft.com/docs/services/563879b61984550e40cbbe8d/o

元記事を表示

【Rails】ModelのPKをULIDに変更する

## やりたいこと
モデルのPKをULIDに変更し、モデル生成時に自動でULIDがPKとして設定されるようにしたい。

### なぜULIDをPKに利用しようと思ったか
Railsは初期値としてPKが`bigint auto_increment`で設定されています。
そのため、`edit`や`show`などのPKを含むルーティングを行う際、PKがURIに表示されており、`rails generate model xxx`で生成したものをそのまま利用すると、別レコードのIDが推測できる状態になってしまいます。

“`url
http://localhost:3000/user/1/edit
-> もしかしたら、user/2/editというルートもあるかも。。。?
“`

-> もし適切なアクセス制限ができていなければ、ユーザが直接URIを変更すると、ユーザに関係のないデータまで閲覧・編集ができてしまう恐れがあります。

## 開発環境
* WSL2
* Ubuntu 20.04 LTS
* Rails 6.1.3.1
* ruby 2.7.3p183 (2021-04-05

元記事を表示

【Rails】ログイン、ログアウトって結局なに?

# 概要
Railsのログイン関連処理について、
Railsチュートリアルの第8章をもとに整理。

## 環境
ruby 3.0.2
rails 6.1.4

## ログイン関連の用語

### HTTP
– ステートレスなプロトコル
– ブラウザページを移動した時に、ユーザーのIDを保持しておく手段が無い

### session
– 半永続的な接続
– コンピュータ間(ブラウザとサーバの間)に設定する
– HTTPプロトコルより上の階層のため、HTTPの特性とは別に接続を確保できる
– sessionメソッド:ブラウザを閉じると自動的に終了する一時セッションを作成。

### cookies
– ユーザーのブラウザに保存される小さなテキストデータ
– ページ移動しても破棄されないので、ユーザーID等を保存可能
– アプリケーションは、このcookiesのデータを使用してDBから情報を取り出せる
– cookiesメソッド:ブラウザを閉じても終了しないセッションを作成。

## ログイン機能の実装

### RESTfulなセッション
セッションをRESTfulなリソースとしてモデリ

元記事を表示

【入門】インターフェースデザインの心理学 〜知ると役に立つ5つのポイント〜

心理学の観点からユーザーの注意を惹きつけるUIを紹介します。

ただいまアプリケーションのフロント部分を作っていまして、デザインで悩んでいた時に本屋でタイムリーな本に出会ったのでその一部を参考文献と共に紹介いたします。

###0.対象
現在サービス開発などに携わっており、アクティブなユーザーを獲得したいと思っている人などにおすすめの内容ですので一読いただけたら嬉しいです。

https://www.amazon.co.jp/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%81%AE%E5%BF%83%E7%90%86%E5%AD%A6-%E2%80%95%E3%82%A6%E3%82%A7%E3%83%96%E3%82%84%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AB%E6%96%B0%E3%81%9F%E3%81%AA%E8%A6%96%E7%82%B9%E3%82%92%E3%82%82%E3%

元記事を表示

【docker-compose】 railsで Unknown MySQL server host ‘db’ (-2)が出た時の対処法

# 概要

ついさっきまで動いていたはずのmysqlコンテナが動かなくなりました。
`docker-compose logs`を実行すると以下のようになってました。

![スクリーンショット 2021-12-18 17.52.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461885/bfbc165c-5624-9fe2-97e6-525dc3ff075d.png)

# 試したこと①

なんとなく下記のエラーが怪しいのでは?と思い`ib_logfile`を削除してみましたがダメでした。

“`
db_1 | 2021-12-18T08:42:07.483929Z 0 [ERROR] InnoDB: redo log file ‘./ib_logfile1’ exists. Creating system tablespace with existing redo log files is not recommended. Please delete all redo log file

元記事を表示

OTHERカテゴリの最新記事