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

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

Rails コントローラーでActionController::UnknownFormatが起きた時の話

# 背景

この間仕事でとあるcsvの出力機能を作っている時にエラーが起きて思ったより解消に時間がかかったので、ちょっとメモっておきたいと思いました。このエラーは他の原因で起きることもあるようですが、参考となればと思います。

# 環境

Ruby 2.7.2
Rails 6.0.3.6

# コード

通常のhtml表示と同じルートにしたいので、 `respond_to` を使いました。
また、もともとransackを使ってフィルター機能を導入していて、csv出力の時もフィルタリングされた結果をベースに出力しています。

“`
def index
@q = Book.ransack(search_params)
respond_to do |format|
format.html do
@books = @q.result.page(params[:page])
end
format.csv do
books = @q.result
redirect_to books_path, flash: { danger:

元記事を表示

変更内容を非難させる git stash でやらかしたこと

過去にgit addしていて、コミットしていないファイルについてはgit stashで対応できますが、過去にgit addしたことのないマイグレーションがある状態でgit stashをしてブランチを切り替えて作業することはNG

“`zsh
Untracked files:
(use “git add …” to include in what will be committed)
db/migrate/20211004063538_add_order_number_to_cards.rb
“`

この状態で、git stashを行っても追跡されていないファイルにマイグレーションファイルが存在し、切り替えたブランチ先に追跡されていないマイグレーションファイルを持ち込んでしまう。

この際のエラーが出た場合は、2パターン解決策がある
# ロールバックをして、データベースの整合性を取る方法

“`zsh
$ bin/rails db:status

database: db/development.sqlite3

Status Migrat

元記事を表示

#1 ユーザー認証、ログイン機能

#はじめに
自分の学習復習のために、アプリを一から作成する手順を記事にしてます。
今回は #1 のログイン機能になります。
#0と#0.5も記事にしてますので、準備段階から見たい方はそちらを参照してください。

#目次
1.gem ‘devise’をインストール、初期設定
2.ユーザーテーブル作成、マイグレーションファイル編集
3.deviseのstrong parametersを設定
4.ユーザーの登録画面の編集、ログアウトボタンの追加
5.ログインの遷移先設定、遷移先のページ作成

##1.gem ‘devise’をインストール、初期設定
“`ruby:Gemfile
gem ‘devise’
“`
Gemfileにdeviseを追加。(最下部に追加)

“`Ruby
username:~/environment/snow-review $ bundle install
“`
bundle installを行い、アプリケーションに読み込ませる。

“`Ruby
username:~/environment/snow-review $ rails g devise:ins

元記事を表示

RalisのMVCモデルを分かりやすくどう説明するか

##はじめに

どうも、27歳未経験からエンジニア転職を目指しているもきおです。

これは当時プログラミングスクール卒業したての頃、エンジニア採用面接でのお話

**面接官**「えーそれではMVCモデルを説明してもらえますか?」
**もきお**(はい、来たその質問。)「モデル,ビュー,コントローラーの略で情報処理をこれら3つで分割して行うモデルのことです。コントローラーが情報を受け取り、DBとの連携が必要な場合はモデルとやりとりを行います。その後、必要な情報をビューに表示させるという流れです」(よし、ちゃんと言えた。ドヤっ)
**面接官** 「えーじゃあMVCモデルをここにいるIT知識の乏しい人事の方にもわかるように説明してみてもらえますか?」
**もきお**(おっと、その展開は聞いてない。)

こんな感じでその企業からは内定はいただけたのですがMVCモデルをIT知識があまりない方に対しても分かりやすく伝える事ができず、悔しい思いをしました。

ここで今回はMVCモデルを分かりやすく伝えるためにはどうすれば良いか考えていきたいと思います。

##MVCそれぞれの役割
まず改めてMVCそ

元記事を表示

PG::ObjectInUse: ERROR database “〇〇” is being accessed by other usersが出た時の対処法

#このエラーの意味とは
このエラーはデータベースが他のプロジェクトやuserで使われているために発生するエラーです。

#原因
考えられる原因としては
データベースに接続中のために発生しているので
・Dockerを使っている場合、他のプロジェクトでもdockerが立ち上がっている
・tableplusやpostmanに接続中
・rails コンソールでデータベースにアクセス中

などが考えられるとアドバイスをもらいました。

#解決策

1 dockerを使っている場合

dockerを起動している方に限った解決策です。
ただ自分はこのやり方で解決したわけではないのでご了承ください。
・dockerで他のプロジェクトなどでも起動している場合は
dockerの接族状況を確認します。

“`
$ docker network ls

NETWORK ID NAME DRIVER SCOPE
70875147784c bridge bridge local
561d44c3

元記事を表示

Railsのhas_many throughの使い方を簡単にまとめました。

Railsチュートリアルの14章で出てきた**「has_many through」**の使い方をわかりやすいように、まとめていきます。
※Railsチュートリアルをやっていないと、いきなりコードを見ても理解できないかもしれないです。
まず、以下のコードを例に説明していきます。

“`ruby
class User < ApplicationRecord has_many :active_relationships, class_name: "Relationship", foreign_key: "follower_id", dependent: :destroy has_many :followeds, through: :active_relationships #ここ #
end
“`

“`ruby

元記事を表示

PG::DuplicateColumn: ERROR:が出た時の対処法

#このエラーの意味とは
PGはpagesのことみたいです。
***Duplicate***とは***複製***の意味です。Columnはカラムのことです。
これは***テーブルに同じカラムが複製されている***。
***同じ名前のカラムが存在しているのはダメだよと怒られているエラー***です。

#どんな時エラーがでた?
railsで“`add_〇〇_to_articles.rbの内容を書き直そうと思い、
rails g migration add_〇〇_to_articles 〇〇:string“` 実行
これはカラム追加コマンド“`です。

⚫︎コマンドの説明はこの記事に載せてあります。
https://qiita.com/Hashimoto-Noriaki/items/c9d31577fd647ee8d08f

その後、 bundle exec rspec –tag focus (rspecのテスト)“`を実行しました。
(このコマンドはテストをしたい内容を絞ってやるときに実行します。)
するとエラーが出て、

“`
#省略

bin/rails:4:in `

元記事を表示

【Rails】正規表現の基礎知識

正規表現とは、文字列の一部分を抽出・置換したり、文字列が制約を満たしているかを調べるための表現方法です。

#正規表現のメソッド
**subメソッド**

“`
irb(main):001:0> str = “りんごを食べる”
=> “りんごを食べる”

irb(main):002:0> str.sub(/りんご/,”みかん”)
=> “みかんを食べる”
“`
文字列の指定した部分を別の文字列に置き換えるためのメソッドです。
第1引数に置き換えたい文字列、第2引数に変換後の文字列を指定します。
なお操作したい文字列は`/`で囲みます。

**matchメソッド**

“`
irb(main):001:0> str = “Hello, World”
=> “Hello, World”

irb(main):002:0> str.match(/Hello/)
=> #

irb(main):003:0> str.match(/Good/)
=> nil
“`
引数に指定した文字列が、メソッドを使用した文字列に含まれているか否かをチェックするため

元記事を表示

railsチュートリアル第七章 フォームHTML

###フォームHTML
下のコードを定義したフォームを理解するために、小さなコードに分けて考えてみましょう。
まずは、埋め込みRubyが使われている“`form_with“`からendまでの外側の構造を読み解いていきます。

“`html
<% provide(:title, 'Sign up') %>

Sign up

<%= form_with(model: @user, local: true) do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>

<%= f.label :email %>
<%= f.email_field :email %>

<%= f.label :password %>
<%= f.password_field :password %>

<%= f.label

元記事を表示

railsチュートリアル第七章 ユーザー登録フォーム

##ユーザー登録フォーム
今度はユーザー登録フォームを作成しましょう。
signupのページに示したとおり、ユーザー登録ページはまだ空白のままなので、このままではユーザー登録できません。
この節の目標は、登録欄を作成することです。

###form_withを使用する
ユーザー登録ページで重要な要素は、ユーザー登録に不可欠な“`情報を入力するフォーム“`です。
Railsで“`form_with“`ヘルパーメソッドを使います。
このメソッドはActive Recordのオブジェクトを取り込み、その“`オブジェクトの属性を使ってフォームを構築“`します。

ユーザー登録ページ /signup のルーティングは、Usersコントローラーのnewアクションに既に紐付けられていることを思い出してください。
したがって、次のステップは、“`form_with“`の引数で必要となる“`Userオブジェクトを作成“`することになります。
必要となる@user変数の定義は、下のようになります。

“`rb
class UsersController < ApplicationCo

元記事を表示

Railsチュートリアルを1週してみた感想

#はじめに
**「1週目ですべて理解してやるぞ!!!」**と無謀なことを思わないほうがいいですね…

2021/9/24(金)から2021/10/5(火)まで、約1週間半ほどかけましてRailsチュートリアル6版 1週目を終えました。その感想などを書いていこうと思います。

## 勉強中に意識したこと
できる限りサンプルに出てくるコードはコピペせず、手で入力することを意識しました。
Rubyのコードを書きなれていないこと、また書いていくことでコードを読む力がつくのではないかと思ったからです。
前半〜中盤であまりに理解度が足りていないと感じたため、中盤からは**しっかり1行ずつ読んでいく**ことを意識しました。

##勉強に費やした時間
合計 11日 47時間40分(平均4時間20分/日)
実際には1日1時間しかやらなかった日もあれば、8時間以上やった日もありました。

##Railsチュートリアルに取り組む前の勉強
基本情報技術者試験の参考書を用いたコンピュータサイエンスの基礎、その他書籍などでwebアプリケーションや通信・サーバーについての勉強。その他、Linux標準教科書でLin

元記事を表示

[Rails]親データと関連付を行なったデータを全て取得する

[1.はじめに](#1-はじめに)
[2.実装](#2-内容は)
[3.おわりに](#3-おわりに)

#1. はじめに
いつも全ての値を取得するにはモデル名.allすればいいから簡単だと思っていたら関連付の値を取得するのに意外と苦労したのでまとめます。
#2. 実装
通常

controller

“`rb
def index
@インスタンス = モデル名.all
end
“`

これで全ての値を取得することが可能でしたが。関連付けを行なっている場合はそうは行きません。

例として“Userモデル“と“Postモデル“を想定します。

User

“`rb
class User < ApplicationRecord has_many :posts end ``` Post ```rb class Post < ApplicationRecord belongs_to :user end ``` UserとPostの関連づいた情報を取得していきます。 情報を取得するには``joins``を使用します **関連付いた情報を取得** ```rb

元記事を表示

RspecでAWS SDKでS3の署名付きURL発行のテストをする (Ruby on Rails)

# はじめに
仕事で、Ruby on Railsを用いてS3から署名付きURLを発行する処理を実装しました。

こちらの記事を参考にして行いました。

https://qiita.com/takeyuweb/items/b32dd7487d724faac1f

そしてRspecのテストを行おうとしたのですが、以下の記事を参考にして詰まってしまったためまとめたいと思います。

[Ruby AWS SDK v2 でS3の署名付きURLを発行する](https://qiita.com/takeyuweb/items/b32dd7487d724faac1fe)

# 問題

以下のコードを実装して、テストを行おうとしました。

“`s3_download.rb
s3 = Aws::S3::Client.new
signer = Aws::S3::Presigner.new(client: s3)
signer.presigned_url(:get_object,
bucket: ‘your-bucket’,

元記事を表示

createメソッドについて!

#①.結論

createメソッドは、モデルが使用できるActiveRecordメソッドのひとつです!

保存のために、new→情報を記述→saveとしていたところが、createメソッドの引数を記述して実行するだけで保存できます!

#②.解説

下記が記述の形です!

“`php
モデル.create(カラム名: 値)
“`

たとえば、postsテーブルのtextというカラム名に、params[:text]の情報を保存します。

その場合は、以下のような書き方です!

“`php
Post.create(text: params[:text])
“`

フォームの情報はparamsに含まれています!

text: の部分がテーブルのカラム名です!

params[:text]の部分がparamsとして送られてきたデータになります!

これにより情報を保存できます!

#③.まとめ

部分的なパーツを覚えるという感じですかね!

とても便利で汎用性はあると思いますので、今後の為にも活用していきたいと思います!

何か説明で間違っていたらご指導お願い致します(_ _)

元記事を表示

【Rspecエラー】Could not find a valid mapping for

##環境
Ruby 3.0.2
Rails 6.1.4.1
devise 4.8.0
omniauth-google-oauth2 1.0.0

##状況
Rspec実行時に下記のエラーで怒られた
(deviseのテスト設定済)

“`
Failure/Error: sign_in user

RuntimeError:
Could not find a valid mapping for #
“`

“`spec/factories/employees.rb
FactoryBot.define do
factory :employee, aliases: [:user] do
firstname { “test” }
lastname { “employee” }
sequence(:number) { |n| “1#{n}” }
sequence(:email) { |n| “tester#{n}@example.com” }
end
end
“`

##解決方法

元記事を表示

【Rails6】Webpacker::Manifest::MissingEntryError を解消する

### 1.使用環境

* mac.os Catalina バージョン10.15.7

* Ruby 3.0.1

* Rails 6.0.4.1
* psql (PostgreSQL) 13.4
* node 16.10.0
* npm 7.24.0

###2.実際のエラー

Webpacker can’t find application in …
Webpacker がファイルを探せていないこと原因です

Webpackerとは簡単にいうとRuby on Rails上でJavaScript開発をするために必要なファイルのまとまりです。
Node.jsで、サーバーサイドで動きます。

![スクリーンショット 2021-10-05 17.08.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1858392/86a7e44c-04ad-1f9a-aa1c-386cb0f792b5.png)

###3.試したこと

<%= javascript

元記事を表示

【jp_prefecture】rails_adminで都道府県一覧セレクトボックスを表示する

RailsAdminでjp_prefecture gemを使用して、都道府県一覧セレクトボックスを作成するのに少しハマったのでメモ。
下記のようにEnumとして定義してあげれば無事動作できました。

“`ruby
class City < ApplicationRecord include JpPrefecture jp_prefecture :prefecture_code rails_admin do create do field :prefecture_code, :enum do enum JpPrefecture::Prefecture.all.collect { |p| [p.name, p.code] } end field :name field :description end edit do field :prefecture_code, :enum do enum JpPrefecture::Prefecture.all.coll

元記事を表示

Rubocopを使ったLintチェックのやり方

## Rubocopとは

Rubocop(ルボコップ)とは、Railsアプリ開発において代表的なリンターです。

リンターとは、コードが一定の規則に従っているかをチェックし、従っていなければ違反警告を出してくれるツールです。

ここのコードは長すぎるね。とか、メソッド名変えようか。とか、インデント入れたほうがいいよ。とかをコマンド1つでターミナルに吐き出しててくれます。

これによりコードの書き方を統一できるため、テストと同様に現場では必須のツールです。

## Rubocopを導入するための2ステップ

Rubocopを導入する手順を解説します。

### 手順①:Gemをインストールする

Gemは、Airbnb社が公開しているカスタマイズ済みのrubocop-airbnbというGemを使用するのがおすすめです。

普通にデフォルトのRubocopを導入してもいいのですが、デフォルトに加えてたくさんルールを追加しなければならず手間だからです。

https://github.com/airbnb/ruby/tree/master/rubocop-airbnb

という訳でインスト

元記事を表示

【個人開発】(Nuxt.js + Rails)OSSやプロジェクトのソースコードを管理するGitHubのように、web上で結合テストをチームで同時に管理・実行・記録出来るプラットフォームを開発しました!

#はじめに
今回、個人で開発したWebサービス「Itamaster」の本番稼働版をリリースすることが出来ました!
こちらのサービスを開発しようと思った経緯は、ある日会社で、統合テストの管理・実行を行っていたときに、**「何故ソースコードの管理プラットフォーム(GitHub等)はあるのに、結合テストの管理プラットフォームは無いんだろう」**と思った事がきっかけです。
開発期間は八ヶ月ほど、作業工数は大体600時間です。

弊社、私の所属しているチームは結合テストはExcelによって管理しており、実行記録もExcelを利用しています。
Excelでの管理・実行には、以下のような不便な点がありました。

– Excelでの作業は、PCにかかる負荷が大きかったこと。
会社のPCは自宅で扱うようなハイスペックなものではないため、Excelで作業を行っていると、セルをコピーしたりした時に**PCがフリーズしたり、突然Excelが落ちて、保存していないデータが復旧しなかったり**と、作業中に感じる**ストレス**がとても大きかったです。

– Excelだと、複数人で一つのファイルに対する作業が出来

元記事を表示

Ruby on Rails ~rescue_from~

RailsをAPIモードで使用していた時に400などのエラーリスポンスを書く必要が出てきた。複数のアクション内で同じようなエラー処理になってしまうだろうなあと思ったのでこのような処理を共通化する方法はないだろうかと調べた時に`rescue_from`メソッドに出会った。
[Github](https://github.com/rails/rails/blob/18707ab17fa492eb25ad2e8f9818a320dc20b823/activesupport/lib/active_support/rescuable.rb#L51)

# メソッドの仕組み
Githubの処理を見ていくと、3つの引数をとっている。

## klasses
特定のエラーに対応するクラス名を受け取る。。クラス名そのままでもいいし(クラスとして定義されている定数?)、文字列でも良い。

## with
エラーを補足した際に行うための処理を渡す。メソッドかprocオブジェクト。

## &block
エラーを補足した際に行うためのブロック。
with引数がnilだった場合にこのブロックがwithに代入され

元記事を表示

OTHERカテゴリの最新記事