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

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

`npm install axios`したら404出たんだけど

「よーし、Rails API × Vue.jsで簡単なTodoアプリ的なものを実装しよ」

・・・10分後・・・

「非同期でHTTP通信したいときには一般的に`axios`を使うのね。よーし、インストールしてみよ〜」ポチッと

“`bash:ターミナル
❯ npm install –save axios
npm ERR! code E404
npm ERR! 404 Not Found – GET https://registry.npmjs.org/@vue%2fvue-loader-v15 – Not found
npm ERR! 404
npm ERR! 404 ‘@vue/vue-loader-v15@15.9.8’ is not in the npm registry.
npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
npm ERR! 404 It was specified as a dependency of ‘@vue/cl

元記事を表示

【Rails】ActionCable~用語について~

## はじめに
実装の流れは長くなるので省略させていただきます。
自分が疑問に思ってノートに記録した物を記事にしていきます。

## 前提条件
Ruby 2.6.3
Rails 6.1.5

## 用語について
ActionCableとwebsocketを使用するにあたり、新しい用語がいくつか出てきました。
以下の通りです。

・コネクション
通信方式のこと。プロトコルとしてはTCPがコネクション型、UDPがコネクションレス型。
TCPは一般的なHTTP/HTTPSリクエスト&レスポンスの通信で使用されている。
websocketの通信方法でも使用されており、websocketコネクションをオープンすることで通信を確立する。

・コンシューマー
websocketコネクションのクライアントのこと。

・チャネル
MVCでいうコントローラーの役割を果たす。
ボタンなどで発火されるとチャネルのアクションが実行されるみたいなイメージ?
チャネルはコンシューマーをサブスクライブ(利用登録)できる。
コンシューマーは複数のチャネルにサブスクライブされることが可能。

・サブスクライバ
コンシュー

元記事を表示

【Laravel・Rails】親が削除されたらリレーション先の子テーブルも削除する方法まとめ

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## Laravel
### cascadeOnDelete()
マイグレーションファイルでやる方法。

“`php
Schema::table(‘posts’, function (Blueprint $table) {
$table->foreignId(‘user_id’)->constrained()->cascadeOnDelete();
});
“`

https://readouble.com/laravel/9.x/ja/migrations.html?header=%25E5%25A4%2596%25E9%2583%25A8%25E3%2582%25AD%25E3%2583%25BC%25E5%2588%25B6%25E7%25B4%2584

### deleting()
modelにロジックを書く方法。
“`app/Models/User.php
protected static function boot()
{
parent::boot();

self::dele

元記事を表示

【Rails/JavaScript】アクティブストレージの画像をプレビュー表示させる方法

## 初めに

アクティブストレージの画像をプレビュー表示させる方法をまとめました。
実装の備忘録としてJavaScript1つ1つの記述の意味も一緒に記録しています。

## プレビュー表示の方法

### ①プレビュー用のjsファイルを作成
今回は「preview.js」という名前で作成しました。
  

“`app/javascript/preview.js 
🗂 app
∟ 🗂 javascript
      ∟ 🗂 channels
      ∟ 🗂 packs
    ∟ application.js
      ∟ preview.js                #こちらを作成
“`

### ②application.jsを編集

行うことは2点です。
1.turbolinks(高速化)をコメントアウトする
  →理由はJavaScriptの動作に影響を及ぼす可能性があるためです。
2. require(‘../preview’) を追記し、jsファイルを使えるようにする

“`app/javascript/packs/

元記事を表示

RailsでDB内を確認したい時

# はじめに
Rails 6.0.3を使用してローカル環境にてアプリケーションを作成中にアソシエーションを実装しようとしていて自分が作成したDBがどのようなcolumnを設定して、テストで入力している、user情報やuser_id、content内容などを確認して紐付けを行いたいと思う場面がありました。
その際に、ターミナル上で確認した時の内容を備忘録として記事にします。

環境
Ruby: 3.0.1
Rails: 6.0.3

# 設定内容
テーブルは3つ作成してあり、以下の3つ
– users
– blogs
– favorites

それぞれにカラムを設定
__users column__
– name
– email
– password_digest

__blogs column__
– content
– user_id

__favorites column__
– user_id
– blog_id

# 発生していた問題
usersのid(デフォルトで作成されている)とblogsカラムのuser_idを互いに紐づけるため【usersのidとfavoritesのu

元記事を表示

【エラー解決/Rails/devise/Careywave】ArgumentError in Users::Registrations#edit【editでプロフィール画像をプレビュー表示させる】

## 初めに

deviseの編集ページで、プロフィール画像をプレビュー表示させる時に以下のエラーが出ました。

“`
ArgumentError in Users::Registrations#edit
Can’t resolve image into URL: undefined method `to_model’ for #
Did you mean? to_xml
“`
今後のため、解決方法を記録しておこうと思います。

## 使用したもの
Ruby on Rails
JavaScript
devise
Careywave(uploader)

## エラー内容
ArgumentError in Users::Registrations#edit
![スクリーンショット 2022-06-09 15.39.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655769/9ce25225-893f-25a9-c790-8fcf7a5266ea.png

元記事を表示

# Ruby on Rails(ruby3.0系) の環境構築 ※Windows

この記事ではdockerでの仮想環境で構築するわけではなくCドライブにそのままrubyをインストールして環境構築をします。今からrubyやrailsを始めるという方向けです。
### バージョン
ruby 3.0.4p208 (2022-04-12 revision 3fa771dded) [x64-mingw32]
Rails 7.0.3
***
### rubyのインストール
[ruby公式](https://rubyinstaller.org/downloads/) から __Ruby+Devkit 3.0.4-1 (x64)__ をクリックしてダウンロードして下さい。
※バージョン確認コマンド
`ruby -v`
※rubyのバージョンが3.1系だと`rails new プロジェクト名`でrailsのプロジェクトを立ち上げる時に以下のエラーが発生してプロジェクトが上手く作られず、`rails s`で始めることが出来なくなります。
“`
Errno::ENOENT: No such file or directory – bs_fetch:open_current_file:

元記事を表示

Railsバージョンアップ時に’unf_ext’のインストールに失敗した

# 1. 背景
Rails 5.2.6から5.2.8へアップデートするためにGemfileを修正し、`bundle update`した時に事態は発生した。

# 2. エラーログ
~~~
(前略)
Fetching unf_ext 0.0.8.2 (was 0.0.8)
Installing unf_ext 0.0.8.2 (was 0.0.8) with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

current directory: /opt/bundle/ruby/2.7.0/gems/unf_ext-0.0.8.2/ext/unf_ext
/usr/bin/ruby2.7 -I /usr/lib/ruby/2.7.0 -r ./siteconf20220609-1597-ncuewr.rb extconf.rb
checking for -lstdc++… *** extconf.rb failed ***
Could not create

元記事を表示

【Rails】deviseでログイン機能を作る

# はじめに
課題で読んだ本の感想を投稿するアプリケーションを作りましたが、色々と苦戦しましたので備忘録として記事を投稿しようと思います。
今回はdeviseを使ったユーザーの新規登録・ログイン・ログアウト機能の実装について記載します。

# 環境
– 開発 (cloud9)
– 言語 (Ruby 2.6.3)
– フレームワーク(Rails 6.1.6)

# 前提
– deviseを導入している
※導入方法については[【Rails】deviceの導入](https://qiita.com/va6Gjz/items/5b3c3fc673777ebf3332)でまとめていますので、参考にしていただけたらと思います。

# モデルを作成する
ユーザー機能を作成する際はテーブルなど色々作る必要がありますが、deviceはモデルの作成すると自動的に必要なデータを作成してくれます。まずはモデルを作成しましょう。

※このコマンドはdevice独自のものになります。
“`:terminal
$ rails g devise モデル名
“`
今回は「User」という名前のモデルを作成します。

元記事を表示

【Rails】rescue_fromによる例外処理

## はじめに

rescue_fromについて軽く調査したので記録する。この記事がだれかの役に立てば幸いです。

## 結論

raiseで発生させた例外を`rescue_from`で検知し、指定したメソッドの実行に繋げることができる。

### 詳細

大まかな使い方は以下の通りになります。

“`app/controllers/application_controller.rb
# Forbiddenの例外を捕捉した場合に、rescue_403メソッドを実行する
rescue_from Forbidden, with: :rescue_403

private

def rescue403(e)
render status: :forbidden, json: { message: “アクセス権限がありません” }
end
“`

Forbiddenの例外を発生さえる流れとしては、

“`app/controllers/application_controller.rb
# 管理者のみに実行権限を与える
def allowed_to_admin_user!

元記事を表示

RailsでTerser利用時にconsole.logを消したい

アセットパイプラインで、JavaScriptの圧縮にTerserを利用するとき、次のように設定しているケースが多いかと思います。

“`ruby:config/environments/production.rb
config.assets.js_compressor = :terser
“`
通常、この設定で問題はないのですが、
**本番リリース時は、console.logも合わせて消したい!** となると、非常に残念なお知らせとなります。
この設定ですと、JavaScriptに書かれた”コメント”は消えるのですが、console.logはそのままソースコードに残ってしまうためです。

そこで、Terserにオプションを渡してあげて、挙動を調整していきます。

# console.logを消すための設定
JavaScript圧縮時、console.logを含む「console.*」系も全て消したい場合

“`ruby
config.assets.js_compressor = Terser.new(compress: { drop_console: true })
“`

元記事を表示

【Rails】deviseの導入

# はじめに
課題で読んだ本の感想を投稿するアプリケーションを作りましたが、色々と苦戦しましたので備忘録として記事を投稿しようと思います。
今回はdeviseの導入についてを記載します。

# 環境
– 開発 (cloud9)
– 言語 (Ruby 2.6.3)
– フレームワーク(Rails 6.1.6)

# deviseとは
簡単に認証機能を実装できるgemの一つです。
サインアップ機能やログイン機能が簡単に作れます。

# Gemを導入する
まず、Gemの導入します。
Gemの導入の流れは以下のようになります。
– GemfileにインストールしたいGemを記載
– Gemをインストールする

#### Gemfileにdeviseを記載する
Gemfileに、以下のようにコードを記載します。
コードの記載場所は最後の行に追加すると良いみたいです。
“`:Gemfile
gem ‘devise’
“`

#### Gemをインストールする
コードが追加できたらGemをインストールします。
インストールするためのコマンドは「bundle install」になります。
※bu

元記事を表示

Rubyバージョンが切り替わらない? rbenvがバージョンを決める順番について

## はじめに
最近、rbenvでどうしてもrubyのglobalバージョンがうまく切り替わらなくて、困っていました。
色々検索して、複数の記事を参照して設定変更したりしたけど、解決できていません..
そして、stack overflow経由して、rbenvのドキュメントにたどり着き、解決できました。
rbenvがどうやってrubyバージョンを決めるのか、についてもようやく理解できたので、メモとして記録しておきます。

## rbenvでRubyのバージョンを確定する順番
[rbenvドキュメント Choosing the Ruby Version](https://github.com/rbenv/rbenv#choosing-the-ruby-version)によると、
rbenvが利用するrubyバージョンを確定する順番は、
1. RBENV_VERSION環境変数を確認する。もし指定があれば、そのバージョンにする。RBENV_VERSION環境変数は`export RBENV_VERSION= x.x.x`コマンドラインで切り替えられる。(`set by`部分は`RBENV_

元記事を表示

Railsでエンドポイントを立てるときに沼った話

railsをエンドポイントを作成をしていて沼ったところと、どうやってそれを解決したのかを残しておきます
沼ったポイントとしては**railsのcorsの設定**です

## railsのcorsの設定
### どこで沼ったのか
オリジン間リソース共有 (Cross-Origin Resource Sharing, CORS)において、Rails APIでは[rack-cors](https://github.com/cyu/rack-cors)というgemを使用していました。
CORSについての詳しい知識はありませんでしたが、
– 許可をしたいAPIを叩く側のドメイン
– 許可をしたいリソースファイル
– 許可をしたいHTTPヘッダー
– 許可をしたいHTTPメソッド
を設定する必要があるということは認識していました。

便利なgemに感謝しつつフロントエンドの実装を進めていたところ、ログイン用のAPIを叩いたときにsession idがcookieに保管されていないことに気がつきました。

### どうすれば良かったのか
こちらの[記事](https://nishinatoshiha

元記事を表示

belongs_to,とhas_manyを使ったDBへの参照先指定

こんにちは。
modelはDBの情報を動かすために、DBに格納されている情報を引き出してくる役割がありますが、

今回は、アソシエーションの1:Nの関係を紐づけるときに使われる
has_manyとbelongs_toについてざっくりと掘り下げてみることにしました。

開発環境

  • Cloud9
  • Rails 6.1.4

ターミナルでの作業手順

1.rails g model コマンドでマイグレーションファイルの作成
→マイグレーションファイルのテーブル内容を編集
(この時点でテーブルはまだ作成されていない)

2.rails db:migrate
→マイグレーションファイルからテーブルを作成

belongs_toとhas_many

 例として、booksテーブルとUsersテーブルに格納されているデータがあります。

“`Schema.rb
create_table “books”, force: :cascade do |t|
t.string “

元記事を表示

「完全に理解した」状態の僕が「チョットワカル…」になるまでのとある企業の新人研修 part.2

▼前半こちらから▼
https://qiita.com/kobayashimakoto/items/4fe942815c7fc941821f
今回は前回に引き続いて、どのような流れでアプリを作ったのかをご紹介します。
# はじめに
会社員の皆さん

**他部署の人の「名前」や「趣味」をいくつ言えますか?**

「みんなの趣味くらい余裕で知ってるわ」と言えるように
**お手伝い**をするアプリを作ったのでご紹介します。

## アプリ概要 〜TeaTime〜

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2508607/6d6f9ffa-87bf-e825-e585-ba3d1e7955d9.png)

**TeaTime(茶会)とは**
**広く、お茶などを飲みながら話を交わすのを楽しむ集まり。**
※ 精選版 日本国語大辞典「茶会」の解説

## 簡単な使い方説明
・TeaTimeに登録するだけ。以上!
![image.png](https://qiita-image-store.s

元記事を表示

別コントローラーからビューを呼び出す

## はじめに
学習中の初心者です。
言葉足らずなところや間違えがあればコメントにて添削していただけるととても嬉しいです。

## 結論
別のファイルからビューを呼び出す際、**renderメソッド**を利用します。
renderメソッドとは、部分テンプレートを呼び出す際に利用するメソッドのことで、
部分テンプレートとは、ビューファイルで繰り返し使用するコードを切り出し、再利用する仕組みのことです。

**partialオプション**を付け、呼び出したいファイル名を指定する事で、部分テンプレートを表示することができます。
“`ruby:qiita.rb
【例】
<%= render partial: "ディレクトリ名/呼び出すファイル名" %>
“`

## 手順
呼び出されるテンプレートのファイルを作成します。
ファイル名は最初に **_(アンダースコア)** を入れること。

“`ruby:qiita.rb
【例】
_sample.html.erb
“`

該当するビューファイルにrenderで部分テンプレートを記述。
“`ruby:qiita.rb
<%= rend

元記事を表示

[Rails] undefined method `has_many’ for main:Objectと出てきた時

### はじめに
DM機能を実装中に
`undefined method ‘has_many’ for main:Object`
という見たことがなかったエラーに遭遇したので記事にしました。

### 結論
今回の場合は`has_many`のせいではなく`room.rb(Roomモデル)`の一行目の記述が何故か消えてしまった事によるものでした。
“`ruby:room.rb
class Room < #この部分が消えていた! has_many :users, through: :user_rooms has_many :chats, dependent: :destroy has_many :user_rooms, dependent: :destroy end ``` 正しくは ```ruby:room.rb class Room < ApplicationRecord has_many :users, through: :user_rooms has_many :chats, dependent: :destroy has_many :user_rooms

元記事を表示

「Rails パフォーマンスチューニング」viewファイルで起こるN + 1問題の修正方法

controller側ではなく、viewのeachでN + 1が発生していたので修正しました。

Ruby:3.1
Rails:7.0.2.3
MySQL:8.0

## 仕様
– userはcompanyをお気に入り(favorite)登録することができる
– favoriteは中間テーブル
– companyに紐づくfavoriteの中に、ログイン中のuser.idと同じものがあればCSSのclassを追加

上記の仕様を、この様に書いていた。

“`ruby:companies_controller.rb
class CompaniesController < ApplicationController def index @companies = Company.all.includes(:addresses).page params[:page] end end ``` ```erb:index.html.erb <% @companies.each do |company| %>

<% if company.favor

元記事を表示

FakerBotがActiveHashのバリデーションにかかってしまう問題の解決法

FakerBotを使ってActiveHashを含んだテストコードを作成しようとした際、問題が発生してしまったので、その問題と解決法を書いていきます。
## 問題点:FactoryBotがバリデーションにかかるidを選択してしまい、テストに失敗する
“`ruby
class Prefecture < ActiveHash::Base self.data = [ { id: 1, name: '---' }, { id: 2, name: '北海道' }, { id: 3, name: '青森県' }, ``` ```ruby class Item < ApplicationRecord extend ActiveHash::Associations::ActiveRecordExtensions validates :prefecture_id, numericality: { other_than: 1 } ``` 選択肢の'---'に該当するprefecture_id: 1を選択すると、バリデーションにかかるように設定してあります。 ```ru

元記事を表示

OTHERカテゴリの最新記事