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

Rails関連のことを調べてみた2023年01月03日
目次

yarn build したときのエラー解決方法(Rails7 アプリで esbuild を使用時)

# エラー内容

以下のようなエラーが出たときの解決方法を記録しておきます。

“`bash
docker-compose run –rm app yarn build

Creating ***_app_run … done
yarn run v1.22.17
$ esbuild app/javascript/*.* –bundle –sourcemap –outdir=app/assets/builds –public-path=app/assets/builds
/myapp/node_modules/esbuild/bin/esbuild:159
throw new Error(`
^

Error:
You installed esbuild for another platform than the one you’re currently using.
This won’t work because esbuild is written with native code and needs to
install a

元記事を表示

ユーザー管理機能(Devise)について

# deviseとは
webアプリケーションにおいて認証機能を実装するためのgemです。

# 導入方法
1\. ターミナルにてcdコマンドを使い、作成しているAppのディレクトリ内に移動する

2\. Gemfile内で追記する
“` .Gemfile
gem ‘devise’
“`

3\.ターミナル内にてGemをインストール
“` .terminal
bundle install
“`
:::note info
gemをインストールした後はローカルサーバーを再起動する
:::

4\.deviseの設定ファイルを作成
“`.terminal
rails g devise:install
“`

# deviseのモデルを作成
1\.モデルの作成
“`.terminal
rails g devise [モデル名]
“`

2\.テーブルに必要なカラムを追加
モデルを作成するとdb/migrateのディレクト内に先程生成したdeviseのモデルテーブルが生成されている。そのファイル内で追加を行う

:::note info
ex)nicknameを文字列型、空なしにす

元記事を表示

git mergeしたらnot something we can mergeが出たので解決してみた

今回はgit mergeを実行しようとした以下のエラーが発生した

“`
merge: sigh-up – not something we can merge
“`

解決策

ブランチ名をコピペしたらいけた。

ブランチを確認して、マージしたいブランチ名をここでコピーします。
“`git
git branch
filling-in-layout
* main
modeling-users
rails-flavored-ruby
sign-up
static-pages
“`

コピーしたマージ名をペーストしてあげると解決できました。
“`
git merge <マージ名> #マージ名を入力するときだけペーストする。
“`

考えられる原因

おそらくタイプミスなのですが、ぱっと見はよくわかりませんでした。なので、この手のエラーが出たらとりあえずブランチ名をコピペしてみるといいかもしれないです。

元記事を表示

redirect_to @userは redirect_to user_url(@user)と同値

以下の二つのコードは同値です。
“`Ruby
redirect_to @user
“`

“`Ruby
redirect_to user_url(@user)
“`

元記事を表示

投稿のコメントにYoutubeのURLを入れ込む方法

今回はユーザーが投稿した投稿にコメントをする際にYoutubeのURLを埋め込む方法を紹介します。

投稿のコントローラー:favorite(普段自分が使っているコントローラー)
コメントのコントローラー:comment

①commentsテーブルにyoutube_urlカラムを追加します。

“`ruby:コマンドプロンプト
rails generate migration AddYoutube_urlToComments youtube_url:string
“`
“`ruby:コマンドプロンプト
rails db:migrate
“`

②commentコントローラーに、コメント内でYoutubeのURLを埋め込むためのコードを書きます。

“`ruby:app/controller/comments_controller.rb
def create
favorite = Favorite.find(params[:favorite_id])
comment = favorite.comments.build(comment_params)

元記事を表示

【Rails で論理削除】paranoid | paranoia を使わないで discard gem を使う理由

# 【Rails で論理削除】paranoid | paranoia を使わないで discard gem を使う理由

## 三行まとめ
“`
User.destroy # 物理削除
Comment.destroy # 論理削除
“`
☝️いやみわけつかん?

## 【悪い点】 paranoid | paranoia は rails の関数をオーバーライドする。

モデル側で`acts_as_paranoid`という指定をすると、destroy が論理削除になる。

“`
class Comment < ApplicationRecord acts_as_paranoid end ``` ## paranoid | paranoia のメリデメ ### メリット 物理削除の時と名前が同じなので覚えやすい ### デメリット 論理削除と物理削除のモデルが混在するとバグ埋め込む可能性が上がる たとえば - User.destroy = 物理削除 - Comment.destroy = 論理削除 という風に物理削除と論理削除を使うモデルが混在している場合が問題

元記事を表示

[ERROR] Could not resolve “@rails/request” を解決する!

# エラー内容

以下のようなエラーが出たときの解決方法を記録しておきます。

“`bash
$ docker-compose run –rm app yarn build
Creating rails7-bramee_app_run … done
yarn run v1.22.17
$ esbuild app/javascript/*.* –bundle –sourcemap –outdir=app/assets/builds –public-path=assets
✘ [ERROR] Could not resolve “@rails/request”

app/javascript/controllers/***_controller.js:
2 │ import { FetchRequest } from “@rails/request”
╵ ~~~~~~~~~~~~~~~~

You can mark the path “@rails/request” as ex

元記事を表示

【Rails】nil? empty? blank? present?の挙動と使い分けを確認

## 1. TL; DR
下記の基準で使い分ける
– nilかどうかの観点のみで判定したい:nil?
– nil + 空のオブジェクトの存在を判定したい:blank?
– 値の有無によって結果を判定したい:empty?
※例外が発生する可能性があるため取り扱い注意
– 空でないオブジェクトの存在を判定したい:present?

#### 早見表
| |nil? |empty?|blank?|present?|
|— |— |— |— |— |
|nil |true |“NoMethodError“|true |false|
|true |false|“NoMethodError“|false|true |
|false |false|“NoMethodError“|true |false|
|”” |false|true |true |false|
|” ” |false|false |true |false|
|[] |false|tru

元記事を表示

【Rails】present?とexists?の挙動を確認し、使い分けの基準を整理する

## 1. present?
– Railsのメソッド
– オブジェクトがある場合はtrueを返す
– present?の反対は、blank?
– 実行するとキャッシュされる

発行されるクエリを見てみると、1回全部の該当レコードをごそっと取ってきていることが分かる
“SELECT “articles”.* FROM “articles” WHERE “articles”.”title” = ? [[“title”, “Test”]]“

“`
irb(main):001:0> Article.where(title: ‘Test’).present?
(1.6ms) SELECT sqlite_version(*)
Article Load (0.2ms) SELECT “articles”.* FROM “articles” WHERE “articles”.”title” = ? [[“title”, “Test”]]
=> true
“`

## 2. exists?
– Railsのメソッド
– SQLのexists式を使う
– 該当レコー

元記事を表示

RSpec MocksのREADMEを翻訳

# 翻訳する目的

[Everyday Rails – RSpecによるRailsテスト入門](https://leanpub.com/everydayrailsrspec-jp)を読み、モック関連と、FactoryBotについて更に知識をつけたいと思った。どちらも技術本で学ぶのは難しいので、リポジトリのREADMEを通じて学ぶのが良いと思った。
Google翻訳やDeepLを用いて全文翻訳を行うと、日本語が不自然で読みにくかったので、今後何度も参照することを考えて、自分で翻訳してしまおうと思った。
FactoryBotのREADMEの翻訳は既に存在していたので、[RSpec MocksのREADME](https://github.com/rspec/rspec-mocks/blob/main/README.md)を翻訳することにした。

# 翻訳時のルール

– Google翻訳やDeepLは利用しない。
– わからない単語を辞書で調べるのはOK。

ここから下が翻訳した内容です。

# RSpec Mocks

rspec-mocksはRSpec向けのテストダブルのフレームワーク

元記事を表示

Rails API 論理削除の実装

# はじめに
業務のタスクの中で論理削除を実装するタスクが有りましたので、備忘録として書き起こすことにしました。至らぬ点はご容赦ください。。。

# そもそも論理削除とは?
https://www.tutitatu.com/%E3%80%8C%E8%AB%96%E7%90%86%E5%89%8A%E9%99%A4%E3%80%8D%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9%E3%82%84%E6%84%8F%E5%91%B3%E3%80%81%E4%BE%8B%E6%96%87%E3%82%84%E9%A1%9E%E7%BE%A9%E8%AA%9E%E3%82%92%E5%BE%B9/#i-2

↑こちらによると
> データベースのレコードを削除する際にフィールド値を変更する事で削除した扱いにする方式で実際のデータは削除しない事。

とあります。PCの「ゴミ箱」機能がこれにあたるとも書かれていました。
論理削除を実装するメリットとしては、「あたかも削除をしたかのように振る舞う」のでいざ復旧しようとなるとすぐにできることがメリットとして挙げられます。

#

元記事を表示

【個人開発】日用品を自動で購入してくれるアプリを作りました。

## はじめに
こんにちは@prg_mtと申します。
DIVE INTO CODEでエンジニア転職を目指し、4ヶ月間学習をして参りました。
今回はその集大成となるオリジナルアプリについての記事を書いてみます。

## 開発したアプリについて
今回開発したアプリ名は「Stock Roller」です。
アプリ名の由来は「日用品のストックを継続的に回していく」という部分からです。
![スクリーンショット 2022-12-30 17.25.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2881858/1c1def99-9ef7-0890-93ac-9bd890573728.png)

【アプリURL】
https://stock-roller.work/
【Git Hub URL】
https://github.com/TomokiMatsubuchi/Stock-Rolling-App.git

### アプリ制作のきっかけ
![スクリーンショット 2022-12-3

元記事を表示

APIキーを隠す (GoogleMapsAPIを参考に)

GoogleCloudPlatformにてGoogleMapsAPIを利用する際にはAPIキーを取得し、アプリに反映させなければなりません。
その際に注意してほしいのが、APIキーはAPI提供事業者から、利用者個人またはプロジェクトに対して専用で割り当てられるものです。なので、APIキーを盗まれて不正に利用された場合、悪質なアカウントとして停止されたり、ユーザーの個人情報が盗まれたりする危険性が出てきます。APIキーはパスワードなどの認証情報と同じく、厳重に管理しなければなりません。

分かりやすく言うならば、
**APIキーを公開してる=裸で街を歩いてる状態**ということです。

GoogleMapsAPIを利用する記事はこちら
[Railsで地図 投稿 地名検索 一覧表示 GoogleMapsAPI(JavaScript) gemなし](https://qiita.com/kakeru0520sou1/items/9a39b3a122a8be5b9b65)

今回は、この記事でAPIキーを利用する際に、APIキーを非表示にする方法を記事にしました!!

# い

元記事を表示

Capistranoを使った自動デプロイで詰まった話 (Your bundle only supports…)

こんにちは、しほです。

Qiita初投稿。Railsで作ったポートフォリオをCapistranoで自動デプロイしようとして詰まった話でございます。

# 環境

Rails 6.1.6

# 背景

こちらの記事を参考に、AWS EC2への自動デプロイ を実装しようとしていました。
https://pikawaka.com/rails/capistrano

Capistranoとかのインストールをしたり、NginxやUnicornの設定をした後、最後に以下の自動デプロイ コマンドを打ってみると
“`
bundle exec cap production deploy
“`
**「Your bundle only supports platforms [“x86_64-darwin-19”]・・・」**
とエラーが発生して進めない。困った。

# 解決にいたるまで

1. とりあえずぐぐる。このあたりの記事を見て、なんかBundlerがうまくいかないんだなーということを考えた。
https://autovice.jp/articles/150

2\. エラーログに指示のあった以

元記事を表示

【Rails】記事投稿に紐づく複数のタグを保存する実装

## 概要
何らかの記事投稿機能があるとして、各記事に紐づくタグを複数設定したいとします。
今回、アンチパターンとともに、サンプルをご紹介します。

## テーブル定義
まず以下のようにテーブル定義されているとします。
![投稿機能.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642155/b85cc5d2-9040-fb94-474f-1859b76741dd.png)

基本的な設計です。
ユーザーは複数の投稿ができる。
投稿は1人のユーザーに従属する。
`1 対 多`の関係ですね。

そこに、「投稿にタグを複数付けられるようにしたい」という要件が発生しました。
そこで以下のようなテーブル定義を検討したいと思います。
![タグ機能.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642155/fdb21694-303f-6342-c5d3-0d3ceef3eabb.png)
1つの投稿は、複数のタグを持てる。
タグは

元記事を表示

(備忘録)MacにゼロからRubyの環境構築をする方法

# 環境構築とは?
* プログラミングを書いたり、実行したりするような環境を自分のパソコンに整うこと

# 環境構築の手順

## ①テキストエディタの準備
* テキストエディタは文章を作成、編集するためのソフトウェア
* Microsoftが無料提供しているVisual Studio Codeが有名
* 今回はVisual Studio Codeを中心に進む
* Download URL : https://code.visualstudio.com/

## ②VSCodeに拡張機能導入(推奨)
#### 拡張機能とは?
* VSCode単体ではサポートしてない機能を後から付け加えるためのもの

#### Japanese Language Pack for Visual Studio Code
* 日本語表記にする

#### HTML Snippets
* HTMLタグ、CSSタグの入力を補完

#### Ruby
* Rubyの構文をチェック、間違った箇所を指摘

#### zenkaku
* 全角スペースを知らせる
* zenkakuに関してはインストールしただけでは使用

元記事を表示

コントローラを共通化したModuleに対応するビューを自動で検索させる

# ユースケース

Railsで、複数のコントローラに似たActionがあるときに、それらを1つのModuleに切り出して、共通化することがありますよね。controllers/concerns/xxx_feature.rb のようなファイルに切り出すパターンです。

このとき、対応するビューも共通化したいことがあります。たとえば、showアクションを共通化している場合、こんな感じで自分で指定やれば、もちろんできます。

“`ruby:xxx_feature.rb
def show

render “shared/xxx/show”
end
“`

ただ、以下のような点が不満です。

1. 面倒。
2. あるコントローラでは共通化ビューを使いたい、あるコントローラでは直接コントローラで自前のカスタムビューを使いたいという切り分けをしようとすると、テンプレートの有無を調べたりして煩雑になる。

特に、2については耐え難いと感じて、方法を調べました。

# 解決方法

バッチリ、エレガントな方法がありました。

“`ruby:xxx_feature.rb
module

元記事を表示

stripe + Rails 7でサブスクリプション機能を実装してみた

stripeを使って、サブスクリプション機能に関する以下のユースケースを実装してみた。
– プレミアム会員になる
– プレミアム会員を退会する

![overview.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227279/9b0ccfb3-7527-d29c-396d-631e9e3a5ea7.gif)

# 前提条件

– stripeアカウントを持っている
– 以下のgemをGemfileに追加している
“`:Gemfile
gem ‘devise’
gem ‘haml-rails’
gem ‘stripe’
“`
– `devise` gemにより、Userモデルを作成している
– Userモデルは以下の属性を持っている
– customer_key:string
– stripe上の顧客IDを表す属性
– subscription_key:string
– stripe上のサブスクリプションIDを表す属性
– subscription_status

元記事を表示

[Go]Collection操作が楽楽書けるsamber/loライブラリの紹介

元々RailsからGoの案件にうつって一ヶ月半ほど経過しました。
この間に、Rubyに存在した

– 配列から条件にマッチする要素を取得する“find(detect)“
– 配列から条件にマッチする要素で絞り込んだ配列を生成する“filter(select)“
– 配列から新たな配列を生成する“map“

といった**便利メソッドが標準ライブラリとして存在せずforループやら活用して自分たちでなんとかするしかない・・・というのが実情であると知って絶望** していましたが、Go 1.18で追加されたジェネリクスを利用した外部ライブラリ[samber/lo](https://github.com/samber/lo)を使えば楽に書けることを知って歓喜しました。

自分と同じように**Rails案件からGo案件に移ってきて絶望した人向けに、サンプルコードで対比して紹介**したいと思います。
また、このライブラリには弱点も存在するので、その辺も交えて紹介したいと思います。

なお、Rubyでは配列は「Array」と呼び、Goでも配列はあるけど、実際使うのはほぼ動的配列である「Sli

元記事を表示

ActiveRecord::ProtectedEnvironmentError: の対処方法

## はじめに

Railsチュートリアル第7版の10章の終わりにデータをRenderにデプロイしたところ、タイトルのようなエラーが発生しました。

## 環境

OS: macOS Monterey Version 12.3
Ruby: 3.1.2
Rails: 7.0.4

## 発生したエラー

Manual DeployのDeploy latest commitを実行後、Renderのログに以下のエラーが発生しました。

“`
Dec 29 11:35:59 AM rails aborted!
Dec 29 11:35:59 AM ActiveRecord::ProtectedEnvironmentError: You are attempting to run a destructive action against your ‘production’ database.
Dec 29 11:35:59 AM If you are sure you want to continue, run the same command with the environment

元記事を表示

OTHERカテゴリの最新記事