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

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

[Rails] AWS SESのSMTPサーバを使う大まかな流れとSandboxを解除したやりとりの記録

Deviseのパスワード発行メールのように、受信を気にしないメールをサクッと飛ばしたい時がままあるので記事にしました。

# Rails
## gem
gem ‘aws-sdk-rails’
## ActionMailer
“`ruby
# config/initializers/aws.rb

Aws::Rails.add_action_mailer_delivery_method(
:ses,
credentials: Aws::Credentials.new(ENV.fetch(‘AWS_ACCESS_KEY_ID’) { ‘AWS_ACCESS_KEY_ID’ },
ENV.fetch(‘AWS_SECRET_ACCESS_KEY’) { ‘AWS_SECRET_ACCESS_KEY’ }),
region: ‘ap-northeast-1’
)
“`
“`ruby
# config/environments/production.rb

config.action_mailer.deliver

元記事を表示

Railsのセットアップの時、mysql2というgemのせいでbundle installができない時に見る記事

## 概要
Rails + MySQLで開発環境を構築する際に発生しうるそこそこややこしいエラーについて、自分なりにまとめてみました。
**※Railsの中で、mysql2というgemを使用してます。**

## 発生したエラーについて
Railsのプロジェクトを“`rails new“`コマンドで作成後、bundle installした際に下記のエラーが発生することがある。

“`Bash
…省略

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

…省略

linking shared-object mysql2/mysql2.bundle
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1

make failed, exit code 2

G

元記事を表示

DBに保存できないデータを受け取るとき

DBに保存できないデータを受け取るとき(検索のパラメータなど)

“`モデル.rb
attr_accessor:
“`

を使えばいいらしい

元記事を表示

railsで作るURL(ルート)について[超基礎]

#ルータが作るURLは何者?

クライアントとサーバー間でデータ受け渡すために指定された道のり

#具体的に

“`
$ rails g model Users name:string
$ rails db:migrate
“`

“`
$rails g controller Post index create
“`
説明のために、UsersテーブルとPostコントローラを作りました

“`controller/posts_controller.rb
def index
user = User.all
end

def create
user = User.new
user.save
end
“`
とりあえず、Postsコントローラに簡単な処理を書きました。
超簡単に説明すると、

indexアクションでは、
UserテーブルのDBから、Userテーブルのデータをクライアントに返す処理

createアクションでは、
クライアントから受け取ったデータを、DBのUserテーブルに保存する処理
が書かれています

###ルートを作る

ようやくルート

元記事を表示

fatal: remote origin already exists 新たにBitbucket上にリポジトリを作成してpushしようとしたらできなかった話。

#Railsチュートリアル3章の序盤で起きた問題

Bitbucket上にリポジトリを作成してpushしようとしたら

“`

$ git remote add origin git@bitbucket.org:ユーザー名/sample_app.git
fatal: remote origin already exists
“`

“`

$ git push -u origin –all
Please make sure you have the correct access rights
and the repository exists.
“`

エラーをコピーしてないので前後にもう少し文があったような気もしますが、こんな感じのエラーが出てきました。

__入れ物作れないしpush出来ないし!__

もうホント手順通りに進めてもうまくいかないんだから困っちゃうよなあw

さてさてブツクサ言っても問題は解決しません。
❶の方に関しては、もうあるみたいなので再度やる必要はないのですが、私はなんでもやってみたいので、一旦 origin を消して入れ直しました。

__

元記事を表示

Herokuへseedデータを流したら詰まった

#概要

heroku run rails db:seedを実行したらエラーが起きた。

#結論

古い本番環境のデータが残っていたのが原因。

##それまでの過程
➀Herokuへログイン

“`
$ heroku login –interactive
“`
➁Herokuへデプロイして、本番環境でのマイグレーションファイルを生成

“`
$ git push heroku master
$ heroku run rails db:migrate
“`

➂初期データ(seed)を流し込む

“`
$ heroku run rails :seed
“`
##はい、ここで詰まります。
ActiveModel::UnknownAttributeError: unknown attribute ‘user_area’ for User.

Userテーブルにuser_areaのカラムがないんだと。
ここでschema.rbを確認。すると…

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

元記事を表示

【rails】ログインユーザーに一回だけ回答させる (サンプル例)

ログイン、質問投稿、投稿に対する回答ができるアプリがある。
各ユーザーが各質問に対して一回だけ回答できるように設定したい

# 1.モデル

ユーザーを表すmemberモデル、投稿した質問に関するpostモデル、
質問に対する回答を表すanswerモデルがそれぞれある。
各モデルの関係は以下

“`app/models/answer.rb
class Answer < ApplicationRecord belongs_to :member belongs_to :post end ``` ```app/models/post.rb class Post < ApplicationRecord has_many :answers, dependent: :destroy belongs_to :member end ``` ```app/models/member.rb class Member < ApplicationRecord has_many :answers, dependent: :destroy has_many :posts, depe

元記事を表示

Rails scaffoldを使ってRailsに入門する

## はじめに
Railsのscaffoldを使用してCRUDのアプリケーションを生成してみます。
また、生成されたコードを読み解いて処理の流れをざっくりと読み解いてみます。

なお、本編の内容はRailsチュートリアルの2章を参考にしています。随時、参考になった文献を記載しています。

[第2章 Toyアプリケーション – Railsチュートリアル](https://railstutorial.jp/chapters/toy_app?version=5.1#sec-demo_users_resource)

## Rails scaffoldとは

– Railsの機能の一つで、コマンド1つでCRUDの雛形を作成することが出来る
– scaffoldとは「足場」という意味を持ち、Railsアプリケーションの足場を作る機能と言える

[What is Scaffolding in Ruby on Rails? – RubyGuides](https://www.rubyguides.com/2020/03/rails-scaffolding/)

## 使ってみる
### scaffo

元記事を表示

マイグレーションエラーについて

railsでデータベースを用意する際に、

“`
$ rails generate scaffold ・・・
“`

コマンドなどでマイグレーションファイルを作成した後、

“`
$ rails db:migrate
“`

でデータベースの変更を反映しないと、
ActiveRecord::PendingMigrationError
マイグレーションエラーとなってしまいます。
![2021-11-25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2222596/bdbfc058-ca2e-1d2b-dcf8-a7fe9c9260cd.png)

忘れないようにしましょう。
(偉そうにすみません。自分が忘れていたので。)

以上

元記事を表示

【Rails】ルーティングのまとめ

##概要
railsのroutes.rbに記述するルーティングについてのまとめ。

##内容

####ルーティングとは
受け取ったurlを認識し、適切なコントローラ内アクションやアプリケーションに割り当てる機能。

####構文
“`
httpメソッド ‘urlパターン’, to: ‘コントローラ#アクション’
“`

#####ex) 以下のhttpリクエストを受け取った場合、以下のようになる。
“`
GET /patients/17
“`

routes.rb

“`
get ‘/patients/:id’, to: ‘patients#show’
“`

### HTTPメソッド

クライアントから送られたリクエストの種別を表すもの。

####get 
ページを表示する操作。

####post 
データを登録する操作。

####put 
データを変更する操作。

####delete 
データを削除する操作。

###rootの設定 
[http://localhost:3000 /](http://localhost:3000/%E3%80%8D) にアクセ

元記事を表示

改【Railsチュートリアル】プロフィール画像をアプリ内で設定できるように変更

#はじめに
前回の記事[【Railsチュートリアル】プロフィール画像をアプリ内で設定できるように変更](https://qiita.com/supyolo888/items/def08450cc4190977324)で、sample_appにおいて、プロフィール画像をアプリ内で設定できるようにしたが、本番環境でアセットパイプラインに関してのエラーが発生したため、carrierwaveを用いた方法に変更する。
また、[Rialsチュートリアル第6版13章](https://railstutorial.jp/chapters/user_microposts?version=6.0#sec-image_upload_in_production)においてAWSのS3を作成済みなので、今回は本番環境のみそちらにアップロードするよう設定していく。

**前提**
第6版sample_appが完成している

#carrierwaveの設定

Gemfileにcarrierwaveを追加

“`rb:Gemfile
gem ‘carrierwave’
“`

“`
$ bundle insta

元記事を表示

【Ruby】早期リターンと倒置if

##早期リターン
式の値を戻り値としてメソッドの実行を終了します。式が省略された場合には nil を戻り値とします。

引用:https://docs.ruby-lang.org/ja/latest/doc/spec=2fcontrol.html#return

“`ruby
def greeting(flag)
‘good evening’
return ‘good night’ if flag
false
end

greeting(true)
# => “good evening”
greeting(false)
# => false
“`

##倒置if
条件文がfalseのときnilを返す

“`ruby
def greeting(flag)
‘good evening’
‘good night’ if flag
end

greeting(true)
# => “good evening”
greeting(false)
# => nil
“`

元記事を表示

【Rails】Ajaxでデータを渡す際のCSRFエラー【jQuery】

# やりたいこと

`$.ajax`でデータをRails側に渡して保存したい。

“`jsx
function hoge(){
$.ajax({
type: ‘POST’, // リクエストのタイプ
url: ‘/hoge’, // リクエストを送信するURL
data: {
hoge: { hoge: hogehoge }
}, // サーバーに送信するデータ
dataType: ‘json’ // サーバーから返却される型
})
}
“`

# エラー内容

“`
422 (Unprocessable Entity)
Can’t verify CSRF token authenticity.
“`

# 原因

RailsにはCSRFという脆弱性の対策が備わっている。
Railsが提供するformなどのヘルパーを使うと自動でセキュリティトークンが設定されるが`$.ajax`では自分で設定しなければならない。

# 解決策
CSRF対策を無効にするという方法もあるが、通信の際にセキュリティトークンを設定すればよい。

元記事を表示

Rails ロールバックの手順

#はじめに
自分の学びのアウトプットのため、こちらの記事を参考にさせていただきながら書きました。
[【Rails】$rails db:rollbackしたい時の間違えない手順](https://qiita.com/s_tatsuki/items/3e1f119c91e21b8f0c33)

#手順
###1.マイグレートのバージョンを確認
“`shell:コンソール
$ rails db:version
Current version: 20211119053634
“`

###2.ロールバックを実行
“`shell:コンソール
#一つ前のバージョンに戻す
$ rails db:rollback
“`

“`shell:コンソール
#指定したバージョンまでなかったことにする
$ rails db:rollback STEP=◯◯○◯◯○◯◯○
“`

###3.migrateされる前の状態に戻っているか確認
“`shell:コンソール
$ rails db:abort_if_pending_migrations
You have 1 pending migrations

元記事を表示

投稿モデル単体テストコードの記述

前回に続いて、サンプルアプリの投稿機能、Eatモデルの単体テストコードを実装します!

#①.テストコードを記述するファイルを作成

まず、Eatモデル単体テストコードを記述するための、ファイルを生成します!

以下のコマンドを実行します!

“`php:ターミナル
% rails g rspec:model eat
“`

以下のように、テストコードを記述するためのファイルeat_spec.rbと、FactoryBotを記述するためのファイルeats.rbが生成されます!

“`php
spec
L factories
L eats.rb
L users.rb

models
L eat_spec.rb
L user_spec.rb
“`

#②.FactoryBotを準備

続いて、Eatモデルのインスタンスを生成するFactoryBotを設定します!

eats.rbに、以下のように記述します!

“`php:spec/factories/eats.rb
FactoryBot.define do
fac

元記事を表示

【Railsチュートリアル】プロフィール画像をアプリ内で設定できるように変更

#はじめに

Railsチュートリアル第6版sample_appにおいて、プロフィール画像にはgravatarが使用されているが、プロフィール画像をアプリ内で設定できるようにしていく。

**前提**
第6版sample_appが完成している

#初期画像を設定#

usersテーブルにimage_nameカラムを追加する。

“`
$ rails g migration add_image_name_to_users
“`

“`rb:db/migrate/[timestamp]_add_image_name_to_users.rb
class AddImageNameToUsers < ActiveRecord::Migration[6.1] def change add_column :users, :image_name, :string end end ``` ``` $ rails db:migrate ``` 初期画像default_user.jpgをapp/assets/imagesディレクトリ下に用意しておく。 ``` ├ app/

元記事を表示

ActiveRecordクエリメソッドまとめ

#はじめに
ご覧頂きありがとうございます。
初学者がActiveRecordのクエリメソッドと生成されるSQLと比較しながら、まとめました。
また個々のメソッドの詳しい使い方に関してはRailsドキュメントを参照ください。

#find
idを指定してレコードを取得
見つからなかった場合は例外(ActiveRecord::RecordNotFound)が発生

“`
User.find(1)
# SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
“`

#find_by
条件を指定して、レコード1件取得する
見つからなかった場合はnilを返却

“`
User.find_by(id: 1)
# SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
“`

#first
idで昇順に並び替えて、最初の1件を取得

“`
User.first
# SELECT `users`.* FROM `users` ORDER BY `users`.`

元記事を表示

Could not reach host index.rubygems.org. Check your network connection and try again. と言うエラーについて。

### Cloud9を使ってrailsチュートリアルを進めているのですが、`Could not reach host index.rubygems.org. Check your network connection and try again. `と言うエラーについて教えていただきたいです。

### 発生している問題・エラー

“`
$ bundle install
$ bundle update
“`
などを叩くと

“`
Could not reach host index.rubygems.org.
Check your network connection and try again.
“`

と表示されます。

自分で試したことといえば数分時間をおいてから新しくディレクトリを作り直すことしかできず、(お手上げ)しかし、それでなぜかエラーが表示されなくなり、問題なく先ほどのコードを叩くとinstall されてupdate出来てしまいました。

そこで、なぜ解決できたのか質問させてください。

hostに行けないとエラーが出た場合(Could not reac

元記事を表示

ruby on rails tutorial3章を始めたら出てきたThere was insufficient space〜 というエラーの解決方法

やっと3章に突入して意気揚々と進めていくと、

“`ruby:qiita.rb

There was an error while trying to write to
`/tmp/xxxxxxxxxxxxxxxxxxxx/versions`. There was
insufficient space remaining on the device.

“`

がこんにちは。

どうやら何かの容量がないということらしい。

そうこうしているうちに、awsのターミナルにコードを入力できなくなる。
![スクリーンショット 2021-11-23 10.30.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2144713/a365d842-4b6f-973f-26eb-5265ba55315b.png)
![スクリーンショット 2021-11-23 10.30.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214

元記事を表示

【オリジナルアプリ】公務員からの転職を考える人のための交流サイト【公務員NEXT】

はじめに

自己紹介

– 未経験からのエンジニア転職を目指す30代前半の地方公務員です。
– 3児のパパであり、家事・育児・仕事の合間を縫って、何とか20時間/週の学習時間を確保できているという状況です。(記事執筆時点で学習開始から40週を過ぎたので、総学習時間は約800時間です。)
– ポートフォリとして、オリジナルアプリが完成したので、これから転職活動を開始します。

この記事の目的

– 転職活動を開始するにあたって、オリジナルアプリの内容を人の目を意識した形で整理しておきたかったからです。
– オリジナルアプリの案に悩んでいる人に向けて、一つの事例として参考になってくれればと思っています。
– 似た境遇の人の励みになれば、幸いです。(私自身、似た境遇の人が頑張っているところを見るとすごく励みになりました。)

オリジナルアプリ「公務員NEXT」について

目次

[1.サービスの概要](#1サービスの概要)
[2.開発経緯](#2開発経緯)
[3.使用技術](#3使用技術)
[4.インフラ構成

元記事を表示

OTHERカテゴリの最新記事