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

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

メソッドを呼び出す時、どんな処理が行われているのか

メソッドを呼び出すとき、どんなことが起きているのか理解するには2つのことを意識しないといけないんです。
➀メソッド探索
➁実際に実行する

それぞれ見ていきましょう
## ➀メソッド探索
メソッド探索とは、その名前の通り、メソッドを探すことです。
それを考える際に、**レシーバ**と**継承チェーン**という言葉が大事です。
例えば“`@books.each“`というコードがあった時、@books がレシーバとなります。呼び出すメソッドが属しているオブジェクトのことをレシーバといいます。
継承チェーンとは親クラスをたどって最終的にBasicObjectクラスまでたどってメソッドがあるかを探すことです。
イメージとしてはこんな感じです
“`
Object
↑superclass
Array
↑superclass
obj → Myclass
“`
objにたいしてメソッドが呼ばれたときにこの矢印の順にメソッドを探していきます。この図にはないですが、最終的にBasicObjectまでメソッドを探していきます。“`Myc

元記事を表示

Rails タグ編集・一覧・詳細機能とコードの解説

# コントローラの作成
“`posts_controller.rb
def index
@posts = Post.all.order(created_at: :desc)
@tag_list = Tag.all #ビューでタグ一覧を表示するために全取得。
end

def show
@post = Post.find_by(id: params[:id]) #クリックした投稿を取得。
@post_tags = @post.tags #そのクリックした投稿に紐付けられているタグの取得
end

def edit
@post = Post.find_by(id: params[:id])
@tag_list = @post.tags.pluck(:tag_name).join(‘,’)
end
def update
@post = Post.find_by(id: params[:id])
@post.content = params[:content]
tag_list = para

元記事を表示

7つのアクション以外のアクション

オリジナルアプリでグループ共有で使えるカレンダーアプリを作成中。

昨日マイページをルートパスに設定しようとしたところ、パラメーターはルートパスに設定するのは難しいと知り、急遽ルートパスの変更を余儀なくされた。
どんなページに遷移させようか考えた末、グループ登録のページをルートパスにしようと思いついた。

### やりたいこと
まず実装させたいことは、
①グループの新規作成ボタン(sign_in)
②既存グループで自信が未参加のグループへ参加するボタン(sign_up)
③自信が参加中のグループへログインするボタン
以上3点である。

そこで新たに行き詰まったのは、これらのボタンを実装させるためには、どういったアクションがベストなのか、ということ。

まずこのアプリを作る上で意識していることは「シンプルで使いやすいアプリ」である。
ユーザーにはできるだけクリックする回数や入力の手間を省きたいと考えている。
要は③を実装するにあたり、「eachメソッドを使って参加中のグループを一覧として表示させ、グループ名をクリックするだけで、該当ページへ遷移する」といった実装を行いたいわけである。

元記事を表示

Rubyのバージョンを変更した際のLoadError解決法

## 実現したいこと

Rubyのバージョンを変更した際に発生する、LoadErrorを解決したい✅
“`terminal:エラー文(抜粋)
`require’: incompatible library version
“`

## 解決法
結論から言うと、
“`vender/bundle/ruby/バージョン番号“`以下のフォルダを全削除して、“`bundle install“`すれば解決します!!!

## エラー発生→解決まで
その1 rubyのバージョンを変更
“`terminal:terminal
rbenv global バージョン番号
又は、
rbenv local バージョン番号
“`

その2 GemfileのRubyバージョンの書き換え&“`bundle install“`
“`ruby:Gemfile
ruby ‘バージョン番号’
“`

componentでapplication_helperを読み込みたい

### 状況

Rails6.1から導入された、viewcomponentを使用していたところhoge_component.rbで
application_helperを読み込めず困っていました…?

### 実行環境

ruby 3.0.1p64
Rails 6.1.4.6

### 解決方法
Componentの最初にinclude ApplicationHelperを記述する

“`ruby
class HogeComponent < ViewComponent::Base include ApplicationHelper ... end ``` ### 学び gemや今回のようなapplicationhelperが使用出来ないときは、Helperが読み込めないことがほとんどでした(これで何十時間溶かしてきたことか...?) そういう時は一度include ~~Helperとして見ると解決することが多いです!! エラーが出ると脳死で延々とググってしまう癖があるので、なぜそのエラーが発生しているのかをできるだけ細分化してワンステップごとに解決できるように

【Serializer】カラムの命名は他言語開発者にも配慮しよう

# きっかけ

最近でいちばんなるほどと思ったこと、検索してもあまり出てこない情報だなと感じたのでまとめる。

# 出来事

ActiveModelSerializerでJSONを出力する際、**Rubyの命名規則で**カラム名を書こうとした。
たとえば、ユーザーが自身のアイコン画像があるかのフラグを真偽値で返したいときの命名。

“`ruby
class UserSerializer < ActiveModel::Serializer attributes :id, :name, :registered_avatar def registered_avatar ... end end ``` 最初は```avatar_registered?```と命名しようとしたが、 他のserializerのコードを見ても語尾に```?```をつけた命名をしていなかったので、 何でだろうと思いながらも一応空気を読んで```registered_avatar```と命名してPRを出した。 すると > “`avatar

Rails7で複数画像file_filedを使っていると空画像が入る対策

## 背景

Rails6.1からRails7に上げたとき、画像フィールドの動作がおかしくなったのを修正した備忘録。

RailsアプリはHerokuで動かしており、画像のアップロードにCarrierWaveとCloudinaryを使っている。
development環境では実際にCloudinaryには上げず、手元のローカルファイルとして動作させている。
画像のためにRailsのActiveStorageは使っていない。
また、画像のアップロードは複数画像を使うために`file_filed multiple: true`を使っていた。

## 起こったこと

複数画像を許可している`file_filed`を使って画像をアップロードすると、想定していない空画像が一緒にアップロードされてしまう。

![スクリーンショット 2022-03-08 170300.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42721/025970ce-bd32-bfc9-e356-678334e88785.png)

con

複数テーブルに複数レコードをフォーム1つで保存する

### 環境:

ruby 2.7.3

rails 6.1.4.4

# やりたいこと

form_withとfields_forを使って、関連性のない複数のテーブルに、複数のレコードを、ボタン1クリックで保存する。

![スクリーンショット 2022-03-08 16.01.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2496677/ff1a9dbd-e992-83c9-daea-4d9f0010871e.png)

猫のコメントはCatテーブル、犬のコメントはDogテーブルに保存する。さらに、それぞれの種類に対するコメントをボタン1つで一括登録しようというのが今回のお題。

### 全体の流れ

1. 入力ページにアクセスすると、コントローラー側でモデルCatとモデルDogをまとめた擬似モデルのインスタンス(=@formとする)が作成される
2. 擬似モデルのinitializeメソッドが走り、モデルCatに対応するattributesのインスタンス、モデルDogに対応するattribu

【Ruby/Rails】定数の定義と管理方法

# config gemを使う

“`config/settings/development.yml“`などファイルを作成して環境ごとに管理する。

下記のように呼び出して使える。

“`ruby
Settings.SERVICE_NAME
#=> “hoge_app”

Settings[:SERVICE_NAME]
#=> “hoge_app”
“`

# クラス内で定義

文脈としてあるクラスの中だけで使われるような定数はそのクラスに定義する。
“`freeze“`を忘れずに!

“`model/post.rb
class Post < ApplicationRecord ... MAX_COMMENT_COUNT = 100.freeze ... end ``` # 参考 https://github.com/rubyconfig/config https://qiita.com/clbcl226/items/c068f617aa34d552a50a

Cherry本の著者伊藤さんの開発タスクをアサインされたらどういう手順で進めるべきかのアウトプット

# 参考記事
https://qiita.com/jnchito/items/017487cd882091494298

# はじめに
***上の参考記事のアウトプット用にこの記事を書きます。***
上の記事の方が勉強になるのでご了承ください。

# 結論
まず上の記事にこういうフレーズがあります。

>引用 タスクは食べられるサイズに小さく切ってから口に運べ!
アサインされたタスクをそのままほおばると喉に詰まって死ぬぞ!!

***これは大きな問題にいきなり取り組むと何もできないから
まずはタスクを分けて考える***かと思いました。

### 自分がこう思った理由
コードを書けない人が0からコードを書くための3ステップの通り、
いきなりコードを書こうとしても書けないので
***やりたいことを言語化してからコードを書く***ことが大事です。

https://qiita.com/Hashimoto-Noriaki/items/682755f8a51a3f085fb6

順を追って書いて行きます。

# 1.現在の仕様(システムの挙動の確認)
まずアプリケーションがどういう仕組みで動いて

Rails × Vue.jsのSPAでTwitterのOGPを動的に反映させる方法

ご縁箱の実装で上手く情報を掴めず詰まった部分でしたため、
これからSPAで実装する方の役に立つかな?と思い、執筆いたしました。
クローラーについても知っておいた方が理解しやすいと思いましたので予備知識としてまとめています。

※ 間違っている点などございましたら、コメント欄でタコ殴りにしていただけますと幸いです。

## 目標: TwitterのOGP画像を動的に!!
ツイートのURLから出力される画像を切り替えることが出来ます。
Twitterで拡散されたいサービスを作る場合、工夫次第で大いに有効な手段になるかと思います。
![image](https://user-images.githubusercontent.com/78721963/155685673-158df3bc-4f66-4e53-a89a-8c92f5a9579d.png)

ご縁箱もおかげさまでPV数が24,000を突破しまして、
サービス紹介記事のLGTM数も100を”超えそう”です(圧)

https://qiita.com/o83184206/items/dcab2743fea236f0aa67

それはさ

Active Record attribute methodまとめ(その①: BeforeTypeCast編)

# はじめに
何かとやってくれるActive Record。その機能を十分に使いこなせていますか?
~~僕は、使いこなせてません!笑~~
今回は、そんなActive Recordのattribute methodのうち、BeforeTypeCastのメソッドについてまとめていきます。
(2022年3月時点。Rails7.0対応。)

# 検証環境
以下のschemaとmodelに基づいて検証を行なっています。

“`
# db/schema.rb
create_table “todos”, charset: “utf8mb4”, force: :cascade do |t|
t.string “title”
t.datetime “schedule_at”
t.integer “status”
t.datetime “created_at”, null: false
t.datetime “updated_at”, null: false

Rails Docker ec2 本番環境のエラーを確認する

# 想定環境
railsをdockerで開発したアプリケーションをAWS EC2にデプロイした際に発生したエラーに対応する方法。

本番環境で以下のようなエラーが発生
![スクリーンショット 2022-03-07 1.41.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1820335/4d313449-47db-bb45-d9c7-a7b0b1469931.png)

# 解決方法
まずはec2にSSH接続する。
EC2 > インスタンス > インスタンス名 > インスタンスに接続 に接続方法が記載されている。
“`
ssh -i “***.pem” username@IPアドレス
“`

ec2にSSH接続後、コンテナのあるディレクトリまで移動。
docker-compse ps でコンテナ名を確認。
![スクリーンショット 2022-03-07 1.49.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/

ユーザー詳細ページで params[:id] が取得できない

自作でグループ内で共有できるカレンダーアプリの作成中。

【やりたい事】
①ユーザー登録
②マイページに遷移(root_path)
③参加中のグループを表示
④グループ名をクリックすると、該当グループのカレンダーへ遷移

ユーザー登録は無事に完了。
本日はマイページの作成に取り掛かる。

以下各コード。

“`ruby:user_controller
class UsersController < ApplicationController def show @user = User.find(params[:id]) end end ``` ```ruby: show.html.erb

<%= image_tag @user.image.variant(resize: '300x300'), class: 'profile-image' if current_user.image.attached? %>

【SPA】ローカルでの挙動を本番環境に近づけ動作確認を行う【React】【Rails API】

## はじめに
 本記事は、プログラミング初学者が、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
 そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
 間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。

## ローカルでの挙動を本番環境に近づけ動作確認を行う
ローカルでは、サーバーサイドからフロントエンドにデータがすぐに届いてしまい、そのままだとスケルトンスクリーン等の動作確認をすることが難しいことがあります。
そこで、サーバーサイドからデータが届くのを遅らせる方法について調べてみました。
結果、以下2点の方法が見つかりました。

### ディベロッパーツールでスロットリングを設定する
1つ目は、デベロッパーツールで設定する方法です。
手順は以下の通りです。

デベロッパーツールの「ネットワーク」を選択

![スクリーンショット 2022-03-07 23.29.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234

【Rails】HerokuのストレージにS3を設定

### 本番アプリケーションでクラウドストレージを使う設定
aws-sdk-s3 gemを追加する。

“`:Gemfile


gem ‘rails’, ‘6.0.4’
gem ‘aws-sdk-s3’, ‘1.46.0’, require: false



“`

“`
$ bundle install
“`

### AWSでS3でバケットの作成

##### AWSのIAM(Identity and Access Management)サービスでユーザーを作成

I AMユーザー画面

左側のユーザー選択

ユーザーを追加

ユーザー名には使う目的に近い名前などを設定、AWS 認証情報タイプを選択はアクセスキー – プログラムによるアクセスにチェック

一番右の既存のポリシーに直接アタッチクリック
ポリシーのところは一番上にあるAdministratorAccessにチェック

タグの追加 (オプション)は空のまま進む

ユーザー作成

アクセスキー IDとシークレットアクセス

【ActiveModelSerializer】includeオプションの使い方

# inludeオプション
オブジェクトの関連付けをレンダリングできる。

## 例
postに関連づいているpostの著者、コメント、コメントを書いた人を出力できる。

“`ruby
render json: posts,
include: ‘author,comments,comments.author’
“`

多分こんな感じで返ってくるはず。

“`
=> {
“id”=>222,
“author”=>”kato”,
“description”=>”ccccccccccccccccccccccccccccccccc”,
“created_at”=>”2022-03-07T21:07:22.643+09:00”,
“commments”=>
[{“id”=>1003,
“content”=>”aaaaaaaaaaaaaaaaaaaaaaa”
“author”=>”fugafuga”]
}
“`

Serializerにアソシエーション書けばワイルドカードでも同じようにレンダリングできる。

“`posts_controller.rb
re

【Rails】オリジナルアプリ 作成の手順 その1【備忘録】

# オリジナルアプリ 作成の手順
オリジナルアプリの作成手順の備忘録です。

1、機能ははどのようなものにするのかアイデアを出す。
2、だれに向けてなのか決める
3、DBの洗い出し

## 1、 機能はどのようなものにするのかアイデアを出す。
どのようなアプリの内容にするのかアイデアを出す。
投稿できるもの、チャットできるもの、など

## 2、誰に向けてなのか決める。
誰に向けているのか決める⇨企業、主婦層、学生など決める
さらにどの年代に向けるのかも決める

## 3、アプリケーションの要件定義を洗い出す
どのような機能があり、どのような要件があるのか考える

# 今回作成するアプリ
今回作成するアプリは
1、体温を記録でき、集計することができるもの
2、企業向け、20代から30代向け
3、今回の要件定義
![要件定義 – シート.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2573830/f66c5994-ccfc-d30c-1dc7-aae60987635e.png)

Rails タグ投稿機能のコード解説

# モデル作成
“`
$ rails g model Tag tag_name:string //Tagモデル作成
 
$ rails g model TagMap post:references tag:references //TagMapモデル作成
“`
# 投稿画面
“`posts/new.html.erb
<%=form_with(model: @post, url: posts_path, local: true) do |f| %>

投稿する

<%= f.text_field :tag_name%>・・1

<% end %>
“`
## コードの解説
1・・<%= f.text_field :tag_name:この行を記述することで、フォームに入力されたタグが、params[:post][:tag_name]というパラメータとしてcreateアクションへ送信される

村人Cの私がRuby on Railsチュートリアルを完走してみた。

## はじめに
おはこんばんにちは。 村人Cです。
AとBは主人公と友人感が出るのでCにしました。
冗談はここまでにしておいて、先日超有名な教材である。「Ruby on Rails チュートリアル」
(以後: Railsチュートリアル)を完走したので、振り返りも兼ねて感想を綴っていこうと思います。

## 村人C のプロフィール
文系大学生 4年 休学中 22歳
2021年2月後半にProgateを初めて触り9月までweb制作を中心に学習。
9月26日からweb開発の学習を独学で開始し今に至る。

## Ruby on Railsチュートリアルに取り組むまでの学習状況

– デザインカンプからのコーディング+WP化 (Bootstrapも使ったことがある)
– `JavaScript`の言語仕様について学習経験がある。 (なぜそう書くとこう動くのか?)みたいな

– `sql`の学習経験
– `git`の学習経験
– `ruby`の学習経験
– `rails`の学習経験
– `Linux`の学習経験

ほとんど独学です。web制作の学習には買い切り型のslackサポート付きの教材を