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

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

Rails 診断機能を実装する タグ機能 マッチ度判断

# 実行環境

“`
ruby 3.0.2
Rails 7.0.2.3
“`

### DB設計
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324819/4284be8d-06aa-e9d6-8385-70fb2a9f9f1e.png)

GameとTagが多対多のアソシエーションで結びついている

### 診断機能の概要
gameに紐づいたタグと、ユーザーが質問に答えた回答がマッチしている数が一番多いものが表示される。
すなわち、gameに[tag1, tag2, tag3, tag4]が紐付いている場合、ユーザーの回答が、[tag1, tag2, tag3, tag5]であったならば、マッチ度は75%として表示される。
ただし、[tag1, tag2, tag3, tag5]というgameが他に存在した場合は、こちらがマッチ度100%として表示される。

# アプリケーション作成
必要なモデル、DB等を作成
“`
$ rails new diagnose_games
$ c

元記事を表示

Railsでmigrationかけた後にブランチをチェックアウトしてしまった時の復旧方法

rails db:migrate掛けたことを忘れて、新ブランチにチェックアウトした後
既にテーブルが作成されていることからmigrateができなくなってしまった時の復旧方法

まず、migrateしてしまった時のブランチにチェックアウトします。

そして以下のコマンド
“`zsh
rails db:migrate:status
“`

そうするとこうなっているはず。
“`zsh
Status Migration ID Migration Name
————————————————–
up 20220606000001 Create hoge
up 20220606000002 ********** NO FILE **********
down 20220606000003 Create fuga
“`
********** NO FILE **********
これはmigrate した後にコミットしなかったことで、存在しないファイルがmigrateされて

元記事を表示

【Rails】DBから最新データが取得されていない時の対処法

# 初めに

ポートフォリオのライク機能を作成した際に、`DB`のデータは変更されているのにインスタンスのデータは更新されていなかった。

## 環境

– Rails 6.1.4
– Ruby 2.7.4

## 結論

`SQLキャッシュ`がされていたので、同じ`SQL`を発行した場合キャッシュされたデータ(更新前のデータ)が返ってきた。

# 解決方法

`SQLキャッシュ`は

– 同じクエリが発生すると、データベースへのクエリを実行せずに、キャッシュされた結果を返す
– `SQLキャッシュ`は、アクションの開始時に作成され、アクションの終了時に破棄されるので、アクションの実行中しか保持されない。

なので、`reload`メソッドを利用することでキャッシュを使わずに再取得できます。

“`ruby:like_controller.rb
class LikesController < ApplicationController def create review = Review.find(params[:review_id]) like = Like.

元記事を表示

begin rescue 文

## find
与えられたどのオプションにもマッチする“`「主キー」に対応するオブジェクト“`を取り出せます。
“`
irb> customer = Customer.find(10)
“`
カラム名をつけなくていい。

## find_by
与えられた条件にマッチするレコードのうち“`最初のレコードだけ“`を返します。
“`
irb> Customer.find_by first_name: ‘Lifo’
=> #

irb> Customer.find_by first_name: ‘Jon’
=> nil
“`
カラム名をつける

“`rb
irb(main):001:0> user = User.all
TRANSACTION (0.1ms) BEGIN
User Load (0.4ms) SELECT `users`.* FROM `users`
=>
[# post = Post.

元記事を表示

[初心者用]Railsチュートリアル アプリ作成〜ユーザー登録

## はじめに
Railsチュートリアルを一通り学びポートフォリオ作成に入る前に内容の確認兼、ポートフォリオをチュートリアルの内容を確認しながら作成できるよう大まかにまとめます。

## プロフィール
プログラミング未経験 金融機関勤務 社会人3年目 
web系エンジニア転職のため、2022年3月ごろにProgateを初めて触りweb制作を中心に学習。

## Railsチューリアルの流れ
※ポートフォリオ作成方法にの大まかな流れ関してまとめるため、環境構築やhtml cssの具体的なコード等については省略します。
アプリ名    sample_app
コントローラ名 User
モデル 
|Users|
| —- |
|id|
|name|
|email|
|password_digest|
|remember_digest|

### ・アプリの新規作成とコントローラ、モデル作成
“`rails new sample_app“`をコマンド実行し、もとになるファイルなどを作成
“`rails g controller Users [アクション名]“`を

元記事を表示

Railsをデプロイする時、した時のトラブルシューティング

# 前提
開発環境はCloud9
デプロイはHerokuにするものとする
勉強時に置きたエラーと解決策を書いていく
デプロイの仕方は今回は割愛

# git pushするとエラーになる
### エラー内容
普通に書いてエラーなく操作できているファイルをアップしたとしてもこんなエラーが

“`言語:タイトル
ArgumentError: wrong number of arguments (given 3, expected 2)
“`
簡単に説明すると
>引数が2個のはずやのに3つ渡してるぞ!!

って怒られる
書籍や動画で学んでて仮にコピペしててもなるときはある
>んなもん無理じゃん

って思ったけど大丈夫
この記事で解決
https://qiita.com/yoppy_yophy/items/af0d9eea05e524e52922
もちろん全体の記事も大切だけどこの記事の「対処」の部分を読んでほしい

### エラー内容
さぁHerokuにデプロイできたぜ!
動作確認だ!
って気合入れたらこれ

![68747470733a2f2f71696974612d696d6167

元記事を表示

Rails 地図を簡単に表示させよう HTML埋め込み編

# 完成スクショ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324819/2a79a2a3-6757-8b10-3cd4-12f71860d943.png)

# 機能の概要
投稿ごとに地図を表示させる
表示させる地図は、HTMLの埋め込みで実装

# カラムの追加

“`
$ rails generate migration AddDetailsToPost map_emb:string
$ rails db:migrate
“`

# 投稿時に、Mapの埋め込みを保存させる

“`erb:new.html.erb

<%= f.label :map_emb %>
<%= f.text_field :map_emb %>

“`

“`ruby:posts_controller.rb
def post_params
params.require(:post).permit(~~~

元記事を表示

Railsプロジェクトに監視ツールSentryを導入する

Railsの監視ツールであるSentryを導入した際に、まとまっていて欲しかった情報をまとめました。

# 環境

“`ruby

$ ruby -v
ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-linux]

$ rails -v
Rails 5.2.5

“`

# 事前準備

– sentryの公式ページからアカウントを発行しておくこと

公式:
https://sentry.io/auth/login/o/

# インストール

– 旧式でRavenという名前になっているが、今はSentryに統一されている
– Sentryの公式ドキュメントを参照するとよい
– 以下はマニュアル通り

https://docs.sentry.io/platforms/ruby/guides/rails/

まずはライブラリをインストール

“`Gemfile.rb
gem “sentry-ruby”
gem “sentry-rails”
“`

“`
$ bundle install
“`

設定ファイルに、Sentry公式

元記事を表示

モデル、データベース

### モデルとは
モデルとはアプリケーションのデータや処理を扱う部分です。
データベースにアクセスし、データの取得、更新、削除などの処理を行います。

### データベースとは
モデルとやり取りを行うのがデータベースです。
データベースは名前の通り、データを格納する保存先です。
しかしただ保存されているのではありません。保存されているだけではモデルが該当データの取得等をする際に時間がかかってしまうからです。
データベースではテーブルというもののなかにそれぞれジャンル分けされた状態でデータが保存されています。
ECサイトを例に挙げると、商品名、商品説明、価格、会員情報、購入履歴などのテーブルにそれぞれ該当のデータが格納されていることになります。

###### カラムとレコード
データベースのテーブルはさらに分化することができます。それが「カラム」と「レコード」です。
イメージ的にはカラムはテーブルの題名、レコードはテーブルの内容です。
先述の例をもとにかんがえるといちごのデータが格納されていたとします。
商品名:いちご
商品説明:甘い
価格:100円
「商品名」「商品説明」「価格」が

元記事を表示

ルーティング・コントローラー・ビュー

railsを扱う上で理解しておいたほうが良い基礎知識を自分用にまとめました。
### ルーティングの役割
ユーザーがURLにアクセスした際に初めに要望を受け取るのが「ルーティング」です。
ルーティングはブラウザや、ブラウザ内のフォームからの要望を受け取り、受け取った要望の内容によって、どのコントローラーのどの処理を実行するかを判断し実行します。
“`
get ‘homes/top’ => ‘homes#top’
“`
この記述の場合はhomes/topのURLをgetつまり新しくページを作成するとき、homesコントローラーのtopアクションを使用します。

### コントローラーの役割
ルーティングで判断された内容をもとに、決められた処理を実行した上で、対応する画面を表示させます。
上記の例の場合、homes/topの画面を表示させます。

### ビューの役割
コントローラーから呼び出した対応する画面をどのような見た目で、どこに処理したデータを入れ込むかを書いておくファイルになります。 ブラウザに表示させるHTMLを実際に組み立てます。
ビューで見た目や動きを設定しておかなけれ

元記事を表示

?【初学者用】RSpecでテストコードを書こう!⑤【FactoryBot・Faker】

# はじめに
今回でテストコードについては最後の投稿になります。
前回までの投稿はこちら↓

①?【初学者用】RSpecでテストコードを書こう!【概念・準備】

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

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

https://qiita.com/hondano_gentuki/items/0a91a595df9c0d76f1cc

③?【初学者用】RSpecでテストコードを書こう!③【コントローラーの単体テスト簡単な実装例】

https://qiita.com/hondano_gentuki/items/7f5a36c08b9785022d33

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

https://qiita.com/hondano_gentuki/items/ac52c47570c747f9a6d8

# FactoryBot
テストコードを書く際に、`user = User.new(nic

元記事を表示

Docker Rails + Reactの本番環境構築(ubuntu + Apache + rails + React + MySQL)

# はじめに
バックエンドをrailsで、フロントエンドをreactのアプリケーションを開発した際の、環境構築に苦戦したため、備忘録もかねて投稿します。
とりあえず動くとこまでなので、dockerの利点を生かせていなかったり、セキュリティ関連の設定などは行っていません。
間違いなどあればご指摘いただけると幸いです。

# 前提
railsアプリとreactアプリは開発環境で開発し、完成したものを持ってきて本番環境を構築しました。
そのため、本投稿の構成では開発段階を考慮していません。
継続的に改修していく場合にどうするかが課題です。

# コンテナ構成
##### serverコンテナ
このコンテナにMySQL以外の全てのサービスを詰め込んでしまいます。
dockerは1コンテナにつき1サービスが好ましいので良くない構成かもです…
開発環境ならrailsやreactをそれぞれが持つフレームワーク付随のサーバで良いため、コンテナを分けられますが、webサーバとしてapacheを使用した場合の構築方法が分かりませんでした。
今後の課題です。

##### dbコンテナ
このコンテナには

元記事を表示

Railsにおけるキャッシュストア比較表

# 比較表

主にメリット・デメリットを比較したり、利用シーンをまとめてみました。

|                                 |  FileStore  |  MemoryStore  |  MemCacheStore  |  RedisStore  |
| :— | :— | :— | :— | :— |
| プロセス間共有 | ○ | ✗ | ○ | ○ |
| スレッドセーフ | ○ | ○ | ○ | ○ |
| ホスト間共有 | ✗ | ✗ | ○ | ○ |
| 無料 | ○ | ○ |

元記事を表示

Ruby on Rails7.0.3 × MySQL8.0 のDocker環境構築

おはよう。:relaxed:
色々あってRuby on Railsに入門するので、環境づくりをしたよ。

## Ruby on Railsって何? :thinking:
Webアプリケーション開発フレームワーク。
特徴的だと思ったのは「最善の開発方法は1つ」という信念のもと設計されているところで、手法を学び、手法に則ることで生産性向上につながるとのこと。

哲学2つ
・Don’t Repeat Yourself: DRY
– 同じ意味や機能を持つ情報を複数に重複しておくことは避けましょうの考え方。
・Convention Over Configuration
– 規約>設定:Rails側で既にWebアプリケーションの「最善の方法」を明確にし、各種設定にもデフォルト値を設定している。アプリケーションが迷走することを避けるために、規約の遵守を推奨しているらしい。

## 今回用意する環境

今回はRailsの現時点最新バージョン7を使用したいので、Rubyも公式推奨の3.0で設定するよ。
Ruby: 3.1
*https://hub.docker.com/_/ruby
Rail

元記事を表示

Ruby コーディングテスト 便利メソッド一覧

※自分用メモ
Rubyによるコーディングテストまたは競技プログラミングにうまく使えそうなメソッド一覧

## Array#combination
“`
a = [1, 2, 3, 4]
a.combination(1).to_a #=> [[1],[2],[3],[4]]
a.combination(3).to_a #=> [[1,2,3],[1,2,4],[1,3,4],[2,3,4]]
“`

## Array#product
“`
[1,2,3].product([4,5]) # => [[1,4],[1,5],[2,4],[2,5],[3,4],[3,5]]
[1,2].product([1,2]) # => [[1,1],[1,2],[2,1],[2,2]]
[1,2].product([3,4],[5,6]) # => [[1,3,5],[1,3,6],[1,4,5],[1,4,6],[2,3,5],[2,3,6],[2,4,5],[2,4,6]]
“`
## Array#inject or Hash#inject
“`
# 合計を計算する

元記事を表示

EC2 rails 環境構築

“`
$ sudo yum -y update
$ 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 libcurl libcurl-devel curl
$ sudo curl -sL https://rpm.nodesource.com/setup_10.x | sudo bash –
$ sudo yum -y install nodejs
$ sudo yum -y install wget
$ sudo wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo
$ sudo yum -y install yarn
$ git clone https://github.com/ss

元記事を表示

[Rails]concernをrake taskの中で使う

結論:これをrake taskに入れればよい
“`
require ‘active_support/concern’
“`

実例

concernの所在
“`app/controllers/concerns/test_concern.rb
module TestConcern
extend ActiveSupport::Concern
def test_method(test)

end
end
end
“`

rake task
“`lib/tasks/test_task.rake
namespace :task do
task test_rake_task: :environment do
require ‘active_support/concern’
include TestConcern

end
end
end
“`

元記事を表示

DockerでRuby on Railsの環境を構築する際のmysql.cnfのコマンド及びコード理解

## なぜ記事を書こうと思ったか
mysql 用の設定ファイルを作成する際にコマンド及びコードの理解を備忘録として残すため。

## entrypoint.shのコマンド説明
mysql.cnf
“`
[mysqld]
default_authentication_plugin = mysql_native_password
skip-host-cache
skip-name-resolve

character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init-connect = SET NAMES utf8mb4
skip-character-set-client-handshake

[client]
default-character-set = utf8mb4

[mysqldump]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4
“`

以下にコマンド及びコードの解説を致します。
– `

元記事を表示

ActionDispatch::Http::Parameters::ParseError: 859の対処方法メモ

## 環境
macOS Monterey 12.3.1
ruby 3.1.2
rails 6.1.6

## エラー内容

[Talend API Tester](https://chrome.google.com/webstore/detail/talend-api-tester-free-ed/aejoelaoggembcahagimdiliamlcdmfm?hl=ja)でRails APIのテストを実施していたところ、以下のエラーが発生した。

“`json:Talend API Tester
{
“status”: 400,
“error”: “Bad Request”,
“exception”: “#“,

}
“`

## 発生時の状況

POST “http://localhost:3000/api/v1/teams” で以下の情報を

元記事を表示

【Rails】既存のテーブルにカラムを追加し、外部キーとして設定する

# テーブルと一緒にreference型のカラムを作成する時
せっかくなのでこちらも書いておきます。

Rails 6.0.4

・前提条件
Genreテーブルがある。

・やりたいこと
**Genreテーブルを紐づけた新しいテーブル(Movie)を用意したい**

①credit_cardモデルを作成
“`
$ rails g model Movie
“`
②作られたmigrationファイルを開き、以下のように編集する。

“`db/migrate/20220404054303_create_movies.rb

class CreateMovies < ActiveRecord::Migration[5.2] def change create_table :movies do |t| t.string :title, null: false t.string :image, null: false t.integer :released_year, null: false t.references :gen

元記事を表示

OTHERカテゴリの最新記事