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

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

多対多のアソシエーション間でのデータの取り方

テックキャンプ現役受講生のアプリ開発Day16です。月末が終わりましたが、アプリ開発はまだまだ終わっていません。後、必要になる機能として、「作成したルームにジャンルをつける、テストコードをの記述、ページ全体のレイアウト」があります。正直後1週間強ないと終わりません。7月9日あたりを目標に終わらせようと思っています。今日は中間テーブルが必要なテーブル間で、データを取得する際に個人的に便利だなと思った方法についてアウトプットします。

# アソシエーション
前提となるアソシエーションについて説明します。UserがRoomを作成することができ、Roomには複数の人が参加することができます。従って、User_roomの中間テーブルが必要になります。各テーブル間のアソシエーションを記述します。
“`ruby:user
class User < ApplicationRecord has_many :user_rooms has_many :rooms ,through: :user_rooms end ``` ```ruby:room class Room < ApplicationR

元記事を表示

【独学・未経験】React,Rails,Docker,Heroku,CircleCIでSPAポートフォリオを作成しました

# はじめに
プログラミング初心者&実務未経験者がSPAポートフォリオを作成したので、ご紹介します。

####  作者スペック
###### 職務経験
– 30歳 文系 販売金融会社勤務 
– 新卒から営業を3年経験後、本社へ異動しシステム開発プロジェクトに参加
– システム開発プロジェクトでは、業務側として要件定義や運用決めなどを経験
– 2022年4月から情報システム部門に異動
この通り、会社ではシステムを作るプロジェクトに入ったものの、コードを書いたりは全くしてません(開発はベンダー任せ)

プログラミング経験
– まったくなし
– Web系のエンジニアになりたく、独学で会社へ勤務しながら勉強
– ポートフォリオ着手時点のレベルは、Progate,Railsチュートリアルを終えた程度の実力
– ポートフォリオ作成をしながら、LinuxやネットワークなどのIT基礎技術とフロントエンドのReact,javascriptなどを学びました
– タイピングも毎日30分寿司打をやり、3ヶ月でブラインドタッチをマスターしました。
– ポートフォリオ作成中は本当にたくさんの壁や障害が

元記事を表示

【Rails】RuboCopの導入

## Gemのインストール
RuboCopをGemfileに追加し、インストールします。

“`Gemfile
group :development do
gem ‘rubocop’, require: false
gem “rubocop-performance”, require: false
gem “rubocop-rails”, require: false
gem “rubocop-rspec”, require: false
end
“`
“`:ターミナル
$ bundle install
“`

## 設定ファイルの作成
`.rubocop.yml`を作成します。
“`.rubocop.yml
inherit_from: .rubocop_todo.yml
require:
– rubocop-performance
– rubocop-rails
– rubocop-rspec
AllCops:
NewCops: enable
“`
以下のコマンドで`.rubocop_todo.yml`を作成します。

“`:ターミナル

元記事を表示

デプロイ時に起きたエラー H10 App crashedについて

# デプロイ時に起きたエラーについて
こんにちは、今日はherokuにデプロイする際に起きたエラーについてと解決までの過程を書いていきま。

## 状況と、エラー内容
とはいっても、エラーに関するlogが何処かに行ってしまい、曖昧な記憶でお届けします。(じゃあ書くな)
状況として、アプリケーションをデプロイした際、本来表示されるはずのものがされず、あんたがこのオーナーならlogs見てや。のやつが出てきました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2713246/5c03048a-9db0-20b5-7a85-d68913380940.png)
logを確認すると
“`
heroku[router]: at=error code=H10 desc=”App crashed”
“`
と表示、http statusは、503が出ていました。
ここで、503について調べてみましたが、特に有力な情報はなし、原因を探るため“`heroku run rails c“`でコンソール上

元記事を表示

Rilasのform_withヘルパーメソッドでのエラー

ある特定の条件のユーザーのみ、railsで作成したルームからコメントを投稿しようとすると下記のようなエラーが出て、解決したのでアウトプットします。「undefined method `model_name’ for nil:NilClass」

# エラー発生の経緯
“`ruby:show.html.erb(コメントを打ち込む場所)
<%= form_with(model:[@room, @comment], local: true) do |f|%>
<%= f.text_area :text, placeholder:"コメントを入力してください" ,class:"comment_box"%>
<%= f.submit '送信', class:"comment_bottom_r"%>
<%end%>
“`
上記のような記述でコメント送信ボタンを押すと、undefined method `model_name’ for nil:NilClassとエラーが出ます。投稿フォームでこのようなエラーが出る場合、考えられる原因を列挙すると、
・ルーティングがネストになっていないなどの不備が

元記事を表示

【Rails】異なるモデル同士の情報を紐づける必要性とその方法

# どうした?
ProgateのRailsレッスンにてSNSサイトを作成していくなかで、投稿に関するモデルとユーザーに関するモデルを紐づける方法を学びました。

本記事では
+ 異なるコントローラを紐づける必要性
+ コントローラ同士を紐づける方法

を初学者なりに整理したものです。

# 目標物の確認
今回作成したいページはこのような見た目です。
![スライド1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2688241/264a898d-79b3-4b54-a4dc-5e4f361525e2.jpeg)

# 準備したもの
今回の目標物を実現するために最低限必要なファイルは以下です。
## モデル
**Postモデル** 投稿に関するモデル
`id`カラム: 投稿idとして使用。モデルに情報が入力されると自動生成される。
`content`カラム: 投稿内容
`user_id`カラム: 投稿者のユーザーid。誰が投稿したか?を示す。

**Userモデル** ユーザーに関するモデル
`id`カ

元記事を表示

【Tailwind CSS】画像を真ん中に置きたいのに右にpaddingができた時

# はじめに
プログラミング学習中の[@kat_log](https://twitter.com/kat__log “Twitter”)と申します。

自作アプリにてdiv内に、画像を真ん中に置きたいのに右に空白ができてしまい困っていたのですが、解決したため情報共有です。

(アプリはRuby on Railsを使って作成しているためRailsのコードで記載をしています)

![image.png](https://soco-st.com/wp-content/themes/socost/upload/11813_color.svg)

# 結論

画像の`class`に**container**を設定すると解決しました。

# 試したこと(解決せず)

まだまだ学習中で色々試しました?

– object-center
– bg-center
– justify-center
– origin-center
– justify-items-center
– justify-self-center
– content-center
– items-center
– self-cente

元記事を表示

未経験の新人でも1ヶ月で「使える」人材に育てる仮想プロジェクト型研修(後編)

## これまでのあらすじ

当社では開発未経験の新人さんが入ってくると、
研修の一環として仮想の開発プロジェクトを立ち上げて、
仕様決めからリリースまでの一連の開発作業を体験してもらっています。

計画する、コードを書く、ツールを使う、わからない事を調べる、周りに聞く、トラブルシューティングする、
といった開発における一連の流れを経験してもらいます。

ただ単に知識として理解するというよりも、
経験することでより深く理解してもらえると考えています。

前編では、仮想プロジェクトの入る前の準備や、プロジェクト始動時に、
新人達・先輩達がそれぞれどういったことを行うかを説明しました。

[前編はこちら](https://qiita.com/tatsumi_t2/items/7c5ceca6f354ba21c2eb)

## 後編では

仮想プロジェクトを日々どんな風に進めるのか、リリースまでの話しをしたいと思います。

# 日々の開発作業

## コーディング

新人さんたちの思うように自由に書いてもらいます。
質問されたり、コードを見せてもらった時に、良い書き方を教えることはありますが

元記事を表示

【Ruby】Minitestでスタブを使う(stub/stub_any_instance)

# はじめに

スタブ(stub)とは、テスト中で呼ばれるメソッド処理の代用品のようなものです。
テストで呼ばれるメソッドの処理を指定した処理で置き換えることができます。
「外部サービスの呼び出し処理などを置き換えることによって仮状態で動かして、本当にテストしたい部分へ簡易的に辿りつきたい」といったときによくスタブを使います。

以下では例として次のような`SampleService`のテストを作成することを考えます。

“`ruby
class SampleService
def initialize; end

def call
is_error1 = call_api1
is_error2 = CallApi2Service.new.call
return ‘error!’ if is_error1 || is_error2

‘success!’
end

private

def call_api1
# 外部API1の呼び出し処理
end
end
“`
“`ruby
class CallApi2Servic

元記事を表示

Rails 5.2系から6系へアップデートする際の落とし穴

## 内容
Rails 5.2系から6系へアップデートをした際に、`ActionView::Template::Error invalid base64` エラーが発生してしまう

## 結論
CSRFトークンのフォーマットの違いが原因で発生するエラー

Rails 5.2.5ではCSRFトークンのフォーマットにbase64_urlsafeを利用しているのですが、Rails 6.0系ではbase64_strictを利用している、この違いによってArgumentErrorが起きるようです

## 原因
Rails6.0系のアップデートで、フォーマット方式を変更できるオプションを用意しないまま、フォーマット方式が強制的に変わってしまった
それにより、base64_urlsafeをデコードできずに、エラーが発生してしまう

“`
rails: 5.2.5 -> 6.0.x
CSRF Token format: base64_urlsafe → base64_strict
“`

https://github.com/rails/rails/issues/41783

## 解決法

元記事を表示

Rubyで半角小文字カナを半角カナに変換

## はじめに
半角小文字カナから半角カナへ変換する必要があったので対応をメモとして残します

半角カナ→全角カナへの変換は色々と情報があったが、半角小文字カナ→半角カナへの変換はあまり情報がなかったので、同じような実装をする方の参考になればと思います

## 実装方法
gsub!メソッドのパターンマッチを使って変換機能を実装

https://docs.ruby-lang.org/ja/latest/method/String/i/gsub=21.html
> gsub!メソッドは、文字列中の pattern にマッチした部分をキーにしてhashを引いた値で置き換えすることができる

上記のhashを用いての変換を使用

## 実装例
“`rb
PATTERN = { “ァ” => “ア”, “ィ” => “イ”, “ゥ” => “ウ”, “ェ” => “エ”, “ォ” => “オ”, “ッ” => “ツ”, “ャ” => “ヤ”, “ュ” => “ユ”,
“ョ” => “ヨ”, “ー” => “-” }.freeze

## 半角小文字カナを設定
str = “ァィゥェォ”

元記事を表示

新規登録後のログアウト後にRouting Errorが起こった時の応急処置

 こんにちは。
本日自作webアプリ開発中に、このようなエラーが起きたので、この対処方法をアウトプットしたいと思います。

![スクリーンショット 2022-06-30 15.24.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2687611/b97fdac4-ac41-6731-eb52-25ba65b6d4c4.png)

ログアウトさせてください。。。

結論

“` /config/initializers/devise.rb
config.sign_out_via = :delete
“`
上記の記述を一時的に以下のように修正したら、問題なくログアウトができるようになりました。

“` /config/initializers/devise.rb
config.sign_out_via = :get
“`

この記述をセーブして再度ログアウトしたら、正常にログアウトできました。

※この後getをdeleteに戻しましたが、問題なく動作しました。

元記事を表示

statusがupのmigrationファイルはmigrateされない

railsでmodelを作成してmigrateして、、、を盲目的におこなっていたのでmigrationファイルのstatusについてまとめます。

# migration statusについて
“`$ rails db:migrate:status“`で確認することができます。
statusがupのものはmigration済でmigrateされません。逆にdownのものがmigrateされてschema.rbに反映されます。
schemaに反映されたものは以下の三箇所で使われる。

– ActiveRecord::Railtieのinitializer
– ActiveRecord::Tasks::DatabaseTasks
– active_record/railties/databases.rake

# 本番環境で躓いた
私自身、ローカルで盲目的にrails db:migrateしており、本番環境でtableが作成されないことがありました。
ここら辺は学ばないと確実に躓きそうなポイントだと思ったので記事にしました。

元記事を表示

[Rails]path指定してJSONを取得する方法

railsで開発をしていたときに
ローカルでは正しくJSONファイルを読み込めているが、本番環境でRoutingエラーになる事案が発生しました。

# やりたかったこと
ページの最初の挙動としてロゴをアニメーションで表示することでした。
“`
var title_animation = {
wrapper: title_dom,
animType: ‘svg’,
prerender: true,
loop: true,
autoplay: true,
path: ‘/logo_animation’
};
“`
jsファイル内でイベントの設定を記述。
ロゴアニメーションをJSONファイルに変換したものをpathで読み込んでいました。

# エラー内容
開発環境では正しく動いていたものの、GCP cloud runにデプロイした途端に問題発生。
devツールで確認したところ、JSONの取得が404エラーになっており、実際にURLを入力したところRoutingエラーでした。

![スクリーンショット 2022-06-30 11.00.23.png](https:

元記事を表示

Railsアプリで使っているライブラリのバージョンを一覧表示する

受託開発などで仕事を請けたりしていると、提出するドキュメント(設計書など)に、使用しているソフトウェアのバージョンの記載を求められることがあります。

僕が以前請けた仕事でも、Railsアプリケーションで使用しているライブラリ一覧を記載する必要がありました。

毎回やり方を調べているので、コマンドをメモしておきます。

## bundle installでインストールしたgem
### コマンド

“`
bundle exec gem list
“`

### 出力例

“`
actioncable (5.2.3)
actionmailer (5.2.3)
actionpack (5.2.3)
actionview (5.2.3)
activejob (5.2.3)
activemodel (5.2.3)
activemodel-serializers-xml (1.0.2)
activerecord (5.2.3)

“`

## yarnでインストールしたパッケージ
### コマンド

“`
yarn list –depth=0
“`

※依存関係の深さは0にし

元記事を表示

Railsのpluckメソッドって便利だなーの話

#### はじめに
実務でcontrollerからviewへ値を渡すときに悩んでいたら先輩からpluckメソッドを使うといいよと言われました。
プログラミングスクール時代には学習しておらす、実際に使ってみて「あっ便利だ!」と思いましたので備忘録として残したいと思います。
なお、学習のためにcontrollerからviewへ値を渡す際にかなりまわりくどい書き方をしていますのでご了承ください。
おかしな点等は教えていただけるとありがたいです。

#### 環境
Ruby 2.6.5
Rails 6.0.5

#### pluckとは
pluckとは英語で「摘みとる」という意味らしいです。なんか残酷な・・・。
おそらくオブジェクトから値を摘み取っていくということなんでしょうね。
そんなことは置いといて調べてみると

>pluckメソッドとは、引数に指定したカラムの値を配列で返してくれるメソッドです。
>上記の様にmapメソッドに置き換える事が可能ですが、返り値を配列として取得する場合は、pluckメソッドを使った方がシンプルに記述することが出来ます。

と書かれています。うん、うんそういう

元記事を表示

Rails console で autoload のパスを確認する ( ActiveSupport::Dependencies.autoload_paths )

# コマンド

rails console で以下を実行

“`
ActiveSupport::Dependencies.autoload_paths
“`

# 実行例

“`rb
irb(main):001:0> ActiveSupport::Dependencies.autoload_paths
=>
[“/Users/yumainaura/example/app/channels”,
“/Users/yumainaura/example/app/controllers”,
“/Users/yumainaura/example/app/controllers/concerns”,
“/Users/yumainaura/example/app/helpers”,
“/Users/yumainaura/example/app/jobs”,
“/Users/yumainaura/example/app/mailers”,
“/Users/yumainaura/example/app/models”,
“/Users/yumainaura/example/app

元記事を表示

?【メモ】Railsの基礎中の基礎の用語集②

# はじめに
前回に引き続き、今回も基礎的な用語のアウトプットを行います。

# 運用環境
運用環境とはシステムをどこで使用するか定められている環境のこと。3つの種類がある。
| 運用環境 | 通称 | 概要 |
|:-|:-|:-|
| development | 開発環境 | 主にアプリケーションを開発する際に使用する環境 |
| test | テスト環境 | アプリケーションの動作をテストする際に使用する環境 |
| production | 本番環境 | アプリケーションを実際にリリースする際に使用する環境 |

なぜこのように環境を分けるのかというと、環境ごとに必要な設定が多く存在するためである。
例えば、開発環境では「バグを探しやすいツール」を導入したほうが便利だが、本番環境ではアプリケーションのパフォーマンスを上げるために、余分なツールは使わないほうが適切である場合などがあるため。
Railsでは`database.yml`を編集することで、データベースの設定を運用環境ごとに変更できる。

# ライブラリ
他のプログラムと合わせて使用するために、複雑なプ

元記事を表示

Javaで実装されていたシステムをRubyに移行した話

https://tech.speee.jp/entry/java-to-ruby

元記事を表示

belongs_toとhas_manyを使ったDBへの参照先指定(アソシエーション)

belongs_toとhas_manyの意味としてはこちらの記事で扱っているので、
こちらを前提として進めていきます。

学習中ですので間違えている箇所があると思いますが、ご容赦ください:bow_tone1:

https://qiita.com/3Meshi_Pro9_ram/items/b87f2314f3aa17b4f46c

usersテーブルはすでに作成されており、schemaに新たにrelationshipsテーブルを作成します。
“`schema.rb
create_table “relationships”, force: :cascade do |t|
t.integer “following_id”, null: false
t.integer “follower_id”, null: false
:
end

create_table “users”, force: :cascade do |t|
:
t.string “name”
t.text “introduction”
:
end
“`

元記事を表示

OTHERカテゴリの最新記事