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

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

TDDでテストが書けないことは、論文が書けないことと似ている : Railsチュートリアル備忘録 – 10章

# Abstract

## 目標:

`edit`、`update`、`index`、`destroy`アクションを実装し、UserモデルのRESTアクションを完成させる

## この章の気付き

### TDDはユーザーの意図(〜したい)と相性が良い

– 〜したいという意図をもとに考えるとテストがスムーズに書ける
– **演繹法的思考プロセス**
– 〜したいという引き出しの多さ、セオリー的な知識・経験の蓄積も重要かと
– 経験的に、限られたリソースで必要十分なアウトプットをするためにはこういった思考プロセスが重要

### 可読性という概念

– `unless`表記はときに可読性の向上に役立つ
– (実行内容) unless helper_method?(論理値を返すヘルパーメソッド)の表記が慣例
– **テストコードにおいては特に無理にDRYにせず、他者からのレビューを意識して書くべき**
– **可読性の高さ=シンプルなで的確なロジックであり、テストの目的とよく合致するかもしれない**

### セキュリティ対策

– Strong Parametersの設定は重要

元記事を表示

【学習メモ】Strong Parameters と accepts_nested_attributes_for

#目次
1.背景
2.Strong Parametersについておさらい
3.モデルに、accepts_nested_attributes_forを使っている場合
4.参考

##1.背景

Railsでオリジナルアプリを開発しているが、「Unpermitted parameter: :_destroy」という表示が出てしまい、それをRailsガイドを確認しながら解決させたので、その学びをアウトプットするため、記載する。

##2.Strong Parametersについておさらい

Railsガイドの説明によると、Strong Parametersとは、

>strong parametersを用いることで、Action Controllerのパラメータが許可されるまでActive Modelの「マスアサインメント」に利用されることを禁止できます。つまり、多くの属性を一度に更新したい場合は、どの属性のマスアップデートを許可するかを開発者が明示的に指定しなければなりません。大雑把にすべての属性の更新を一括で許可してしまうと、外部に公開する必要のない属性まで誤って公開してしまう可能性が

元記事を表示

translation missing: ja.activerecord〜のエラー対応

### エラー状況
RSpecにてモデルのテストを実行していたとき、下記エラーが発生。

“`
translation missing: ja.activerecord.errors.models.post.attributes.user.required
“`

###調べた内容
**①誤字脱字の確認**
**②作業ファイルの指定漏れ**
**③ググる**
**④エラー文の解析**

①、②は問題なし。そもそも①と②が該当する場合のエラー文では無いよね!?
③を一通り試したが、該当する情報は出てこず。

ということは④から導き出すしか無ので解析開始!

## 仮説
**translation missing**というエラー文を翻訳すると**[欠訳]**となる。

この[欠訳]というキーワードから立てた仮説は、翻訳がかけているということ。
となると、日本語が対応していないとも仮説できる。

さらに深掘りすると、**[deviseを日本語訳したファイルがない]**というエラーだった。

## 解決方法
仮設検証結果は、おおよそ的中しているようなので解決方法を記述。

“`confi

元記事を表示

Rails before_actionメソッド

最近Railsの勉強をしているのですが、
うーんm(_ _)
さっぱりわからん事だらけです。
なので、今回は学んだメソッドについて投稿します!

#before_action
“`ruby
#sampleController.rb

before_ation :abc, except: :index


def abc
#処理
end


def index
#処理
end
“`
before_actionとは!!
コントローラ内のアクション(メソッド)が実行される前にメソッドを実行できる。
①を例に内容をバラして書いて行きます!
__1、____before_action__
当たり前ですが、__before_action__を記述。
__2、____:abc__
どのアクション(メソッドに処理を送るかを記述)
今回は、__abc__メソッドを指定。
__3、____except: :inde

【rails + docker】CircleCIによるテスト→ECRにpush→ECSにdeploy の環境構築をサポートしてくれるシェルスクリプトを作ってみた

#はじめに

この記事は以前、私が書いた以下記事の改良版となります。

[CircleCIによるrails自動テスト環境を構築してくれるシェルスクリプトを作ってみた](https://qiita.com/drafts/22ab3359920eb97f2e01)

前回は開発環境構築まででしたが、今回はCircleCIによる自動テストまでをできるようにしました。
また、今回は手動で設定するべき項目が結構多いので「構築サポート」してくれるシェルスクリプトとしています。。。

私の環境は以下の通りです。

| OS | 環境
| —————————|——
| Windows 10 Home 64bit | Ubuntu 18.04(WSL2)

#構築する環境

構築する環境は以下の通りです。
GitHubにプッシュ → 自動テスト → ESRにイメージプッシュ → ECSにデプロイができるようになることをゴールとします。

| 項目    | 使用したもの | バージョン
|

[Rails]アソシエーションのキャッシュ制御を活用して無駄なSQLを抑止する

Active Recordには関連付け機能(アソシエーション)という強力な機能があります。
この記事ではアソシエーションのキャッシュ制御を活用して無駄なSQLを抑止する方法をまとめました。

# アソシエーションのキャッシュ制御とは
Railsガイドの下記のように記載されています。
[Active Record の関連付け- 3.1 キャッシュ制御](https://railsguides.jp/association_basics.html#%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E5%88%B6%E5%BE%A1)
> 最後に実行したクエリの結果はキャッシュに保持され、次回以降の操作で利用できます。

実際に動かしてキャッシュされているか確認します。
下記のモデルを使います。

“`ruby
class User < ApplicationRecord has_many :reviews end class Review < ApplicationRecord belongs_to :user end ``` 下記の

【Rails】いいね機能の実装について

# 経緯
プログラミング歴3ケ月の初心者です。
個人的なアプリを作成した際、**非同期通信を用いたいいね機能**を導入したのですが、ググったものをそのまま使って実装してしまったので、頭の中を整理する(理解を深める)ために記事を投稿しようと思いました。

また本記事は、当機能の実装にあたり、Deviseというgemをインストールしている想定で書いていきます。
# 実装
今回は、Userモデル、Postsモデル、Likesモデルを使用します。
## マイグレーション
Likeモデルのマイグレーションを作成します。

“`ruby:db/migrate/○○_create_likes.rb
class CreateLikes < ActiveRecord::Migration[5.0] def change create_table :likes do |t| t.references :post, foreign_key: true t.references :user, foreign_key: true t.timestamps

payjpを使ってクレジットカード機能を導入しちゃおうってわけ(ビュー、補足編)

いやー今日は風が強いですね。
涼しいのに、室内はベタベタジメジメ。

#### 夏だ!サマーだ!夏サマーだ!!

最近AKB48の横山由依ちゃんにときめいてますが、こんばんは。

今日は前回のpayjpを使ったクレジットカード登録の補足編でございますわよ。

見てない方は下をチェッキ!!
[クレジットカード登録編](https://qiita.com/rockettetsu/items/0bc062909a6ce3904506)

# 1 最初に何の補足しましょうかね。

見切り発車にも程があるわ。。。。
いや今回は勢いでいくわよ!!!

# 2 とりあえずビューファイル(haml)を見せちゃおうってわけ

まずはクレジットカードを登録する時のビューよね。
メ○カリとかメルカ◯とかメル◯リとかはこんな感じ。

スクリーンショット 2020-06-16 21.51.50.pngRailsが難しくて辛い!Ⅱ

# ファイルの場所が分らない

まずこれ!
頭の中がアナログな私にはrails newで作成されたアプリのファイルがどういう構造になっているのか分かりませんでした。
なんたって全部*アルファベット*なんですもの。

私は全て紙に書いて行きました。
そう、appからREADME.mdまで全て。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565886/5eb1143f-6443-5e5b-f837-bb2bddc16a4a.png)

こんな感じに最初はなっているかと思います。
今回は最初に理解しておきたいアプリケーションを作成する時にメインでいじるファイルがどこにあるのかを確認しましょう。
それ以外が後から徐々に理解が進みますので焦らないで大丈夫です。

## 画像の左上にある**app**これがアプリケーションの本体です。
appはアプリケーションの略ですね。
この中で最初に必要なのは、assets(アセッツ)・controllers(コントローラーズ)・models(モデルズ)・view

Railsが難しくて辛い!

# 初めまして、こんにちは。

まーたろーです。よろしお願いします。
今回は私がプログラミングスクールに通い始めて初めて躓いた内容を公開します。
正直、辛かった!挫折しそうでした。
でもなんとか持ちこたえることが出来ました。

どう質問したらいいか分からない、そんな私と同じところで躓いた人。
そんな人の参考になると嬉しいです。
私の様に、まだアルファベットに頭が慣れていない人もいるかもしれないので、今回はなるべくカタカナ表記で書きます。

では、さっそくいきましょう!!

## 用意するもの

– 紙
– ペン

頭の中を整理するには、じっくり自分と向き合うのが一番です。
それにはやっぱり紙とペンがいい。
時間はかかってもいいんです。今、整理してしまいましょう。

# 難しい!!

Railsを初めて、何が分からないのか分からない。そんな状態になっていませんでしょうか?
私はなりました。
というより。Rubyのクラスとインスタンスの時点でそうなりました。
先ず、何が分らないのか、納得できていないのかモヤモヤするのか、ハッキリさせましょう。

## 分からない場所はどこ?
– [ファイ

【Rails】Carrierwaveとfog-awsを用いて、画像をAWS S3へアップロードする方法

# 目標

![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579893/6bbd5e51-b52b-41f9-eda5-fda0d5f6e008.gif)

# 開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina

# 前提

AWSのアカウントを登録済み。

下記実装済み。

・[投稿機能実装](https://qiita.com/matsubishi5/items/1a5aeab651b5822d1f2c)
・[Carrierwaveを用いた画像投稿機能実装](https://qiita.com/matsubishi5/items/a0ff8ab9a830d2cfcc7e)

# AWSの設定

### 1.下記リンクへアクセス

[AWS マネジメントコンソール](https://ap-northeast-1.console.aws

Rails On DockerでのAWSデプロイができたので,中身を整理します。

## 近況報告
**やっとですよ!!!!!**
 railsをDockerコンテナに入れてデプロイができました。ざっと3週間以上かかった!
就職活動に関しては,wantedlyは相変わらずですが,Greenの反応がよくなった感じがします。コロナからの復調の兆しでしょうか。最近,超福利厚生が良い企業の面接の機会を頂いたのですが,企業研究の不足でダメでした。2日くらい凹みましたが,自分の面接対策に大きな成長をもたらす経験だったと考えて,そこより自身に合った企業をつかむべく頑張っていこうと思います。

# 今日のお題
 railsを搭載したdockerの備忘録をつくろう

###デプロイまでに参考にした資料
[☆デプロイの参考☆](https://qiita.com/at-946/items/1e8acea19cc0b9f31b98)
[ローカル環境構築の勉強に使用](https://qiita.com/azul915/items/5b7063cbc80192343fc0)
[この記事がコンテナ作成に特に参考になった](https://qiita.com/eighty8/items/0288

Rails アカウントBAN を実装する

#強制ログアウトを実装する
twitterやinstagramでもアカウントがBanされてログインができなくなってしまう…
そんな経験はないことを願っていますが、
今回はそんな機能を実装していきたいと思います。

まずuserとしてsuspended(boolean)の属性を持ったユーザーモデルを準備します。
この停止フラグがtrueのユーザーはログインできず、
他のページへのアクセスを拒否し、強制的にログアウトをさせる機能を作っていきます。

まずはuserモデルに停止フラグがあるか否かのメソッドを実装します。
わざわざメソッドとして準備しなくてもいけそうですが、拡張性を考えてメソッドをモデルに作っておきます。

“`app/models/user.rb
class User < ApplicationRecord #省略 #アクティブなユーザであるか? private def active? !suspended? end end ``` ここで基底コントローラークラスを変更します。 userがログイン中かつ停止フラグが立っている場合は session

連続した改行を画面に表示すると改行が1つにまとめられている。

### 1)背景
以下の画像にある「コンテンツの登録」欄を見て下さい。全部で9行あります。

これを登録して、別画面で**simple_format**メソッドで表示すると、以下のようになります。

登録した通りの行数にするにはどうすれば良いでしょうか。対策を考えました。

### 2)環境

|

【form_with】formはfom_withで統一しよう。 

##【ゴール】
fom_withを理解する

##【メリット】
■ railsの推奨は「form_with」
■ そんなに難しくないので覚えておくべき

##【開発環境】
■ Mac OS catalina
■ Ruby on Rails (5.2.4.2)
■ Virtual Box:6.1
■ Vagrant: 2.2.7

##【違い】

###■form_for
モデルがある。
DBへ保存したいデータに対して使用

###■form_tag
モデルがない
POSTの処理を行い時に使用

###■form_with
両刀
上記2つの機能を兼ね備えた便利なメソッド

##【実際に使ってみた】

###モデルがある時
※例えば以下のようなモデル

モデル名:Book
カラム名①:name
カラム名②:title

“`books/index.html.erb

<% form_with model:Book do |f| %> #model追記
<%= f.text_field :name %>
<%= f.text_area :text %>
<%= f.subm

Railsでgemのapple_idを使ってSign in with Appleを実現し、AppleのJWKをキャッシュする

RailsアプリでSign in with Appleを行う場合、Sign in with Appleは結局の所OpenID Connectなので、id_tokenの検証をRailsで行う必要があります。
その検証はRubyであれば https://github.com/nov/apple_id このgemを使うとかんたんに行えます。

## apple_idを使ってid_tokenの検証をする

“`rb
id_token = AppleID::IdToken.decode(id_token)
id_token.verify!(code: code)
“`
こんな感じでid_tokenの検証を行えるのですが、verify!メソッドの中では何が行われているかと言うと、Appleが提供する公開鍵(JWK)をHTTPSで取得し、そのJWKを用いて署名検証をしています。
デフォルトではverifyするたびにAppleにHTTPSで通信をしていますが、この公開鍵はほとんど更新されないためキャッシュすることが可能で、サーバ実装としてもキャッシュしたほうが望ましいです。

gemのapple_

簡単に日記が公開できるアプリ「公開日記」をリリースした。

またまたwebアプリを公開したので紹介(宣伝)をして、今回の教訓?のようなものも紹介しようと思います。

https://public-diary.herokuapp.com/

### 使ったもの

言語・フレームワーク…いつものruby、そしてrailsです。
サーバー…heroku
独自ドメイン…いまは取得していません。

つかったgem

“`ruby:gemfile
gem ‘devise’ #新規登録・ログイン
gem ‘carrierwave’ #画像アップロード
gem ‘kaminari’ #ページネーション
gem ‘devise-i18n’ #devise 日本語化
gem ‘devise-i18n-views’ #devise 日本語化
gem ‘activeadmin’ #管理画面
gem ‘rails-i18n’ #日本語化
gem ‘rack-attack’ #IPアドレス認証
“`

このほかはほぼ初期のままです。そろそろdevise卒業したいですね。

##紹介
![公開日記top.png](https://qiita

herokuにデプロイできてるのにエラー出て開けない

# エラー

herokuにデプロイして開いたらこんな画面に↓

スクリーンショット 2020-06-16 15.51.04.png

# 解決策
herokuはデフォルトがMySQLじゃないので自分で設定してあげないといけないみたい。

この2つの記事がわかりやすい!↓

– CUIで設定
https://qiita.com/senou/items/108ef1d94dcb5b227b4f

– GUIで設定
https://qiita.com/poster-keisuke/items/f27e190e22d80dc254ed

この2つの記事を読んで概要をつかんでからCUIで設定していった。

# herokuのデータベースをMySQLに変更

“`
[vagrant@localhost memopy]$ h

新しくRailsプロジェクトを作る時にやること/やらないこと

## やること

– `Ridgepole`を入れる
– `action_args`を入れる
– `haml`もしくは`slim`を入れる
– `tapp-awesome_print`を入れる
– 最新バージョンの`Rails`を使う
– 常に`Gem`を最新にアップデート出来る状態を維持する
– `Getting Real`を読む
– [Getting Real: The smarter, faster, easier way to build a successful web application](https://basecamp.com/books/getting-real)
– 日本語アーカイブ: [Getting Real by 37signals](https://web.archive.org/web/20110721234749/http://gettingreal.37signals.com/GR_jpn.php)

## やらないこと

– 論理削除をしない
– `devise`を入れない
– `default_scope`を使わない
– `React`

Railsで主キーをid以外に設定し、ほかのテーブルとアソシエーションを結ぶ

先日、どうしてもテーブルの主キーをID以外に変えなければならない状況になり、依存関係もあるテーブルの主キーを変更したのですが、個人的にはかなり躓いてしまったので、手順をメモします。

# やったこと
実施したことは以下の通り。

– マイグレーションファイルを変更(参照先テーブル、参照元テーブル)
– モデルの変更(参照先テーブル、参照元テーブル)

なお、環境は以下の通り

– Rails 5.2.4.2
– Postgresql 12.2

## マイグレーションファイルの変更
### 参照先テーブルの設定

officesテーブルに従属するstuffsテーブルがあったとします。
officesテーブルの主キーは`office_code`とします。

この時officeテーブルを作成するマイグレーションの設定は下記のとおりです。

“`migration
class CreateOffices < ActiveRecord::Migration[5.2] def change create_table :offices, id: false do |t| # id: