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

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

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サポート付きの教材を

元記事を表示

【Rails】ログアウトしてる状態でホーム画面にアクセスしたら、ログイン画面に遷移してしまう問題とその解決方法

# 経緯
– アプリ制作時にログアウト画面を作ってない事に気付いて実装。しかしログアウト状態だとホーム画面にアクセスしたらログイン画面に遷移されてしまうので、解決を試みた。

# 開発環境
ruby 2.7.2
rails 6.0.4.6


# 原因はどこか
まずはアプリの動作を司ってるapplication_controller.rbに目星をつけた.
その時のコードは以下の通り
“` ruby application_controller.rb
class ApplicationController < ActionController::Base protect_from_forgery with: :exception before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters devise_parameter_sanitize

元記事を表示

カスタムドメインを設定する(Heroku)

これまでHerokuのデフォルトで設定されるドメインを使っていたので変更した。
今回変更したアプリケーションは、フロントとバックエンド2つのアプリから成り立っているが、ユーザーから見えるフロント側のみドメインを変更した。

# 手順

1. ドメインを購入する
2. Heroku側と、ドメイン管理画面(購入したサイトの管理画面)で設定する

## ドメインを購入する
ムームードメインで購入した。(¥500)
https://muumuu-domain.com/

## Heroku側と、ドメイン管理画面(購入したサイトの管理画面)で設定する

アプリケーションのルートディレクトリに移動する
“`
$ cd ~/myapp
“`
example.comのところは購入したドメインに変更
“`
$ heroku domains:add www.example.com
“`
追加できたか確認
“`
$ heroku domains
“`
DNS Targetをコピー(XXX-XXX-XXX.herokudns.com)

“`
===== my-app Custom Domain

元記事を表示

Rails を CakePHP4 に置き換えた時のメモ

## 目的

CakePHP4の勉強がてら、Railsのプロジェクトを置き換える作業を実施した。

## 環境
Ruby On Rails 3.2.11
CakePHP 4.3.5

## 基本文法の比較

#### 文字列操作

“`ruby:Ruby
# 結合
str = str1 + str2
str += str3
# 部分取得
str = str[0,3]
# 分割
str = str.split(‘,’)
“`
“`php:PHP
# 結合
$str = $str1 . $str2;
$str .= $str3;
# 部分取得
$str = substr($str,0,3);
# 分割
$str = explode(‘,’, $str);
“`

#### 配列

“`ruby:Ruby
hash[:col] = 1
array[0] = 2
“`
“`php:PHP
$hash[‘col’] = 1;
$array[0] = 2;
“`

#### if文

“`ruby:Ruby
if str.nil?
# 処理1
elsif str

元記事を表示

【Rails7】annotateのrouterが動かない

# 初めに

Rails の便利な Gem で annotate というものがあります。
データベースのスキーマと rotuer をファイルにコメントとして記述してくれる Gem です。
これのおかげで、確認のするための時間が減ります。
しかし、ここ最近更新がなく Rails7 に対応していない状態です。

## やりたい事

Rails7 でも annotate の router が動くように修正する

## 環境

– Ruby 3.1.1
– Rails 7.0.2.2
– annotate 3.2.0

# 解消法

## 原因

Rails6 から rake routes が廃止され、rails routes でルート一覧が出るようになりました。
Gem の内部のコードで rake routes が使われているので、そこを書き換えると動くようになります。

## Gem のソースコード

annotate のソースを見るために

`$ gem which annotate`

を実行し、コードの場所を特定します。

“`console:コンソール
/rails # gem

元記事を表示

個人アプリをリリースして1週間が経って思ったこと

## 何を作ったのか?
プログラミングソースコード売買プラットフォーム
https://softpick.net
![root.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1195442/62e16947-4f66-6c69-97a1-298943bcd758.jpeg)

## なぜ作ったのか?
僕はこのサービスを作るときもそうですが、ハッカソンなどでもわからないことはqiitaに書いてある内容をそのままコピペしたり、ドキュメントのサンプルをそのままコピペしたりして実装をしていました。僕が駆け出しの頃は検索能力も著しく低かったので、フレームワークやライブラリの強みを全く活かしきれずにいました。
優秀なエンジニアが書いたライブラリの選定から正しい拡張の仕方などがみれるソースコードプラットフォームがあったらなと思い作りました。

### 率直な感想
楽しい。自分が作ったサービスが人に見てもらって使ってもらって、指摘・感想がいただけることがすごく嬉しかったです。実際オフラインで知り合いに見てもらうより、ア

元記事を表示

【Rails】テーブルのカラムを追加する

こんにちは。
早く駆け出したい修行僧です。

勉強用アプリにてカラムを追加する方法を
学んだので、アウトプットしていきます。

尚、「それは違うよ」など訂正箇所がございましたら、
愛のあるご指摘を頂けたら幸いです。

## 環境
MacBook Air(M1,2020) Monterey 12.2.1
Ruby 3.1.0
Rails 6.1.4.6
PostgreSQL 14.2

## 何をしたいか?

まずは、`foods`テーブルに`string`型の`image`カラムを追加したい。

## 現状のテーブルとカラム

追加前の`foods`テーブルとカラムは以下の通りです。

“`:terminal
Column | Type | Collation | Nullable |
————+——————————–+———–+———-+–
id | bigint |

元記事を表示

S3連携でCORSにブロックされた時の対処法

## エラー内容
HerokuとAWS S3を連携させてデプロイしたアプリのconsoleで、以下のエラー文が出て、S3内のデータを呼び出せない?

“`javascript:console
Access to XMLHttpRequest at ‘任意のドメイン’ from origin ‘任意のドメイン’ has been blocked by CORS policy:
Response to preflight request doesn’t pass access control check: It does not have HTTP ok status.
“`

より具体的には、
Rails側からS3に保存したデータ(画像・MP3・jsonファイル)のうち、フロント側(phina.js)で使用するデータ(MP3・jsonファイル)が呼び出せなかった?

## 開発環境
– Rails6系(バック)
– phina.js(フロント)
– Herokuデプロイ済
– S3バケット作成済

## 解決策
結論から言うと、
バケットのCORS

元記事を表示

Railsのpresent?の実装を覗いてみたら想像以上に作り込まれていた話(でもpresent?使わなくても判定可能なら使わない方が良いよ)

Railsを使っていたら、知らない人はいない`present?`メソッド!!

今回、たまたまRailsのコードを見る機会があり、ついでにpresent?の実装も確認したところ想像以上に作り込まれていたのでまとめてみました。

# present?とは

present?についてRailsガイドから抜粋します。

https://railsguides.jp/active_support_core_extensions.html#blank-questionmark%E3%81%A8present-questionmark

> present?メソッドは!blank?メソッドと同等です。

とのことなので、blank?の説明を抜粋します。

> Railsアプリケーションでは以下の値を空白(blank)とみなします。
・ nilとfalse
・ ホワイトスペース(whitespace)だけで構成された文字列
・ 空配列と空ハッシュ
・ その他、empty?メソッドに応答するオブジェクトはすべて空(empty)として扱われます。

present?はblank?を反転した結果ということ

元記事を表示

Ruby on Rails チュートリアル 14章 フォロー機能

## はじめに
Ruby on Railsチュートリアルの備忘録
チュートリアル学習者向けに書いています。
あとは備忘録
14章の内容です。この章は、モデル設計を理解するのが1番の重要で、これさえ理解できれば消化試合です。
チュートリアルと合わせてご覧ください。

## migration生成
“`rb
# referencesは使わない
# user_id:referenceだとuser_id modelを探しに行く挙動
rails generate model Relationship follower_id:integer followed_id:integer
“`

“`rb
class CreateRelationships < ActiveRecord::Migration[6.0] def change create_table :relationships do |t| t.integer :follower_id t.integer :followed_id t.timestamps end

元記事を表示

Cookieを利用した自動ログイン

## はじめに
Ruby on Rails チュートリアルで学んだCookieを利用した自動ログイン
備忘録

ブラウザを閉じた後でもログインを有効にする`Remember me`を実装する
Ruby on Railsを学んでいる方・学ぶ予定の方
前提の記事を読んだ後、こちらを読んでいただければ教材を進める助けになると思います。

## 前提
https://qiita.com/d0ne1s/items/7c4d2be3f53e34a9dec7

自動ログインのない基本的なログイン機構を実装していることが前提です
上記記事でログイン機能の実装を把握した後にこちらを読んでください。
どちらもRuby on Railsチュートリアルのコードを利用しています。

*素敵な記事をお借りします。*

## `remember_digest`属性をUserモデルに追加
“`rb
# 語尾の_to_usersはmigration対象がuses_tableだと明示
$ rails generate migration add_remember_digest_to_users remember_di

元記事を表示

Rails メール送信でLoadError (cannot load such file — net/smtp)の対処法

RailsのMailerで問い合わせ機能を実装していたところ、
このようなエラーが表示された。
[![Image from Gyazo](https://i.gyazo.com/2d12875dffa1f3def0044caaa247ac87.png)](https://gyazo.com/2d12875dffa1f3def0044caaa247ac87)

メールの送信先はGmailを使用している。
問い合わせの確認画面で送信ボタンを押すとエラーが表示された。

### 原因
config/environments/development.rbに設定している
メーラー情報のpasswordを以前作成したアプリのものをそのまま使っていたからだった。

### 対処法
Googleアカウントの管理画面より、
左にあるセキュリティを選択
[![Image from Gyazo](https://i.gyazo.com/1862b48b3f3a83fd646227712a35259d.png)](https://gyazo.com/1862b48b3f3a83fd646227712a3525

元記事を表示

OTHERカテゴリの最新記事