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

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

EC2にRailsアプリをデプロイするための事前知識 ――パッケージ管理ツールとパッケージ

## はじめに
スクールの課題で、「まずEC2にアプリをデプロイしてみよう。」というものが出された。
調べれば新しいものから古いものまで、いろんな情報が出てくる。
とりあえず見たままコマンドコピペして進めていたけれど、一体今何をやろうとしているのか分からない、エラーがまるで意味不明
という状況になり、挫折。時間はかかるが、ある程度の基礎知識を身に着けながら進めたほうが早そうと判断。
課題も無事終えたので、復習がてら、とり貯めたメモをベースに整理。

## パッケージのインストール時に適当に打ったコマンド
“`
$ sudo yum -y install git make gcc-c++ patch libyaml-devel libffi-devel libicu-devel zlib-devel readline-devel libxml2-devel libxslt-devel ImageMagick ImageMagick-devel openssl-devel
“`

“`
$ curl -sL https://rpm.nodesource.com/setup_16.

元記事を表示

【Rails】ActionCable~役割について~

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

## 前提条件
Ruby 2.6.3
Rails 6.1.5

## 記事の対象者
実装を終えたが、それぞれの役割について理解を深めたい人

## 実装の流れ
リアルタイム機能を持ったDM機能を実装するまでの主な流れです。
用語については、[Railsガイド](https://railsguides.jp/action_cable_overview.html)を参考にしてください。

**①サーバーサイド側のチャネルの処理を実装する
②クライアント側のチャネルの処理を実装する
③コネクションの設定ファイルに変更を加える
④データ保存後の処理をモデルに実装する
⑤ブロードキャストの処理を実装する
⑥表示するviewを実装する**

上記流れの中で、記述方法に注意が必要なものだけ説明します。

## ①サーバーサイド側のチャネルの処理を実装する

コンシューマーがこのチャネルのサブスクライバになると下記コードが呼び出される。
(コンシューマーとはクライアントのこ

元記事を表示

Your Ruby version is 2.6.3, but your Gemfile specified 2.7.1

## 概要

bundle installしたら「Your Ruby version is 2.6.3, but your Gemfile specified 2.7.1」エラーが出たので解決方法を書きました。
1人でも多くの人の役にたてればと思います。

## はじめに

### 使用する環境
– MacOS(Intel)
– Rails 6.0.3
– Ruby 2.6.3
– yarn 1.22.17
– Homebrew 3.5.0

## 状況
bundle installしたら上記エラーが出た。
エラー文はローカルの環境のrubyは2.6.3だけど、gemfileに記述されてるrubyは2.7.1になってるから合わせてねってこと

Rbenvでインストール可能なRubyのバージョンを確認
“`
$ rbenv install -list
“`
バージョンを指定してインストール
“`
$ rbenv install 2.7.1
“`
上記のrbenvでインストール可能欄に入ってなくても直接指定することでインストールすることが可能です。
反映する
“`
$ rben

元記事を表示

Rails の Strong Parameters が不要なパターン

# はじめに

最近 Rails に触れる機会があり、Strong Parameters について調べた際にタイトルの内容が知りたかったのですが、書かれている記事を見つけられなかったのでそのことを。

Ruby 自体も含め、しっかり絡んだことがなかったので用語などが Ruby 界隈と合っていなかったりしたらご容赦ください。

先に Strong Parameters について簡単に触れますが、不要な場合は「[Strong Parameters が不要なパターン](#strong-parameters-が不要なパターン)」からお読みください。

# Strong Parameters とは

詳しいところは検索すればいろいろ出てくるので割愛しますが、ざっくりいうと

**Post されたデータ( params )に対し、マスアサインメントを利用する際に意図しないパラメーターが使用されないようにする仕組み**

です。

マスアサインメントは、複数カラムを一括で指定する仕組み。

元々はモデル側で `attr_accessible` を使って許可を与えていたようですが、脆弱性を作りやすいこ

元記事を表示

【10分でできる】笑っていいとも100分の1アンケートのRailsアプリを作ってみた

# はじめに
 [GitHub](https://github.com/mzmz02/qiita_yes_no_app_sample)にコードを公開してるので,コードだけ知りたい方は飛ばしてもらって大丈夫です.

“`:実行環境
Windows10
ruby: 2.6.10
Rails: 5.2.8
“`

# 完成図
 Herokuでデプロイしてるので,ぜひ試してみてください.

 結果画面↓
 https://it-yes-no-app.herokuapp.com/posts/index
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642821/915dd486-6e7d-d28c-facf-4430cb9ad88b.png)

 回答画面↓
 https://it-yes-no-app.herokuapp.com/posts/new
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.co

元記事を表示

【Rails】テーブル内の特定の文字列を含む行の背景を変更する方法

# やりたいこと
 Railsで質問待ちアプリを作っている.ユーザが質問を登録したらテーブルに表示される.
 `post`テーブルに`situation`カラムが入っており,この値が`対応中`のときにテーブルの背景の色を変えたい.

# 結論
 色々試したが,最終的には以下のコードにたどり着いた.

“`erb
<% if post.situation == "対応中" %>

<%# 背景をピンクにする %>
<% else %>

<% end %>
“`

# 試したこと
 JavaScriptの`:content`を使う方法を試した.

## jQueryの導入

### 1. jquery-railsのインストール

“`:Gemfile
gem ‘jquery-rails’
“`

“`:ターミナル
bunsle install
“`

### 2. application.jsの編集
 `//= require jquery`を追記する.このときに書く順番注意.

元記事を表示

ActiveRecord の has_one 関連でサクッと Null Object パターンを実装する

小ネタです。

Rails の ActiveRecord で has_one 関連を使う場合、参照先が存在しないことがあります。

“`ruby

class Account < ApplicationRecord def some_method end end class Supplier < ApplicationRecord has_one :account end Supplier.find(id).account # Account or nil ``` こうなると場合によってインターフェイスが合わなくなるため、メソッドチェーンをつなげるためにはあの目障りなボッチ演算子(`&.`)のお世話になる必要が出ます。 ```ruby Supplier.find(id).account&.some_method ``` これを解決する典型的な方法としては、参照先レコードが存在しない場合は `nil` の代わりに `Account` のダミーオブジェクト・いわゆるNullObjectを返すことでインターフェイスを保つ方法があります。 具体的には関連名と同じメソッ

元記事を表示

ActiveRecord attribute methodまとめ(その②: Dirty編)

# はじめに
今回はActiveRecordのattribute methodのうち、Dirtyメソッドをまとめていきます。
(2022年6月時点。Rails7.0対応。)
以前、[BeforeTypeCastの内容](https://qiita.com/maabow/items/33ad5328b192e3adb49e)をまとめましたが、今回のDirtyメソッドはBeforeTypeCastに比べて、より実用的なメソッドが多いと思います。

# 検証環境
以下のschemaとmodelに基づいて検証を行なっています。
enumを利用しているので、実際にDBに入っている値と出力される内容が異なる箇所が存在します。
“` db/schema.rb
create_table “todos”, charset: “utf8mb4”, force: :cascade do |t|
t.string “title”
t.datetime “scheduled_at”
t.integer “status”
t.datetime “created_at”, null: false

元記事を表示

Rails7 button_toでdata: { turbo: false }でも確認ダイアログを表示させる

# やりたいこと
削除ボタンに対して、Turboは無効化し、確認ダイアログは表示させたい。
しかし、 turbo_confirmを用いた実装ではTurboが無効化されているため、確認ダイアログの表示ができない。

参照

https://qiita.com/jnchito/items/5c41a7031404c313da1f#%E7%A2%BA%E8%AA%8D%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0confirm%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E5%87%BA%E3%81%97%E6%96%B9%E3%81%8C%E5%A4%89%E3%82%8F%E3%81%A3%E3%81%9F:~:text=%E3%81%BE%E3%81%9F%E3%80%81GET%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%82%92%E9%80%81%E3%82%8B%E3%83%AA%E3%83%B3%E3%82%AF%E3

元記事を表示

Ransackで大きな数値を入力したときに発生するActiveModel::RangeErrorを回避する方法

## 解決したい問題
Ransackでは大きな数値を検索条件に入れると`ActiveModel::RangeError`が発生します。

“`ruby
User.ransack(age_eq: 123456789012345678901).result
#=> ActiveModel::RangeError: 123456789012345678901 is out of range for ActiveRecord::ConnectionAdapters::SQLite3Adapter::SQLite3Integer with limit 8 bytes
“`

SQLite3やPostgreSQLで確認する限り、SQL上は検索条件として大きな数値を入力してもエラーにはならないようです。

““sql
— (データが見つかるかどうかは別として)エラーにはならない
SELECT *
FROM users
WHERE age = 123456789012345678901
““

またActiveRecordもエラーにはならないようになっています。

“`ruby

元記事を表示

【Rails】BootstrapとFontAwesomeの導入

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

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

# Bootstrapの導入
#### yarnでインストールする
導入方法はいくつかあるらしいのですが、今回はyarnでインストールします。

“`:terminal
$ yarn add jquery bootstrap@4.5 popper.js
“`
`jquery`…Bootstrapを動かすのに必要なjQueryです
`bootstrap`…Bootstrapの本体です
`popper.js`…機能を利用するのに必要なものらしいです

bootstrap@4.5の`@4.5`はBootstrapのバージョンになります。好みのバージョンを指定してください。ただし、Bootstrapのバージョン5はjQueryが必要ないそうです。今後、jQ

元記事を表示

`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」という名前のモデルを作成します。

元記事を表示

OTHERカテゴリの最新記事