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

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

#Rails / found unpermitted parameter / e.g ignore GET request RequestBody ( not URL parameter )

# Controller example

use `:except`
not `:permit`

“`rb
class UserController < ApplicationController def index permitted_params = params.except(:foo).permit(:page) ... end end ``` # How to test Maybe Rspec does not support invalid Get with RequestBody method # Original by Github issue https://github.com/YumaInaura/YumaInaura/issues/3074

元記事を表示

railsで二つのモデルに共通のタグを関連づけるときの選択肢

# この記事でやること

* tagはtoxi法で実装( https://qiita.com/you8/items/b2394104c6f9865f5d46#toxi%E6%B3%95 )
* 二つのモデルの投稿フォーマットを共通のタグに関連づける

# 選択肢

* STIで一つのテーブルに二つのモデルをいれる
* tag_mapテーブルをそれぞれ用意する
* tag_mapに二つのidカラムを用意

## STIで一つのテーブルに二つのモデルをいれる

STIはこの記事が分かりやすい

「railsでSTIの使い方」

メリットはtableを新しく作らなくていいというところだがデメリットとしてtableが肥大化するというのがある。

## tag_mapテーブルをそれぞれ用意する

![副業Q-A-10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193389/f4ef5453-e61e

元記事を表示

【自動デプロイ】反映された?されてない?そのモヤモヤ、解消します【Rails,Capistrano】

#はじめに
TECH CAMPというプログラミング教室を近々卒業する添野といいます。

今日はCapistrano自動デプロイについての記事です。

自動デプロイって超便利なんですけど、たまに変更が反映されてない時があります。
これ、**かなりモヤモヤします**。「反映できました!」「できませんでした!」ってちゃんと教えて欲しい。
AWSの再起動面倒だし…。

で、色々試してみたところ、**モヤモヤを解消できました**。

#結論

下記手順でモヤモヤを解消できます。

1. `routes.rb`に`$date = Time.now.to_s`と書く
2. 適当なビューに`$date`を表示する

早速説明していきます。

##1. `routes.rb`に`$date = Time.now.to_s`と書く

“`ruby:routes.rb
Rails.application.routes.draw do
$date = Time.now.to_s
(省略)
end
“`

場所は`Rails.application.routes.draw do`から最後の`en

元記事を表示

ERR_CONNECTION_TIMED_OUT に苦しめられた(今も正直理解できていない)

# 背景

制作物をデプロイする際に ERR_CONNECTION_TIMED_OUT の連発
ネットワーク関係分からないため調べて、キャッシュクリア等するも解決せず。
URLを確認してみると、SSL化していないのにも関わらずhttpsになっていることに気づく
その際にHSTSというものが関係しているかも?と知る。(キャッシュクリアしても解決しないのは何で)
新たに別EC2で再デプロイするも結果変わらず ERR_CONNECTION_TIMED_OUT
諦めてEIPを新たに設定すると問題なく接続され、デプロイ終了。

# どうしてタイムアウトになったか(考察)
デプロイ後、certbotでSSL化しようとある程度進めていたが、ドメインを取得しておらず途中で断念、
その際に proxy_set_header X-FORWARDED_PROTO https を追記しており
それでhttpsに接続されようとしていた?(これが合っているかも分からないため今後検証)
追記した内容を消しても、一度httpsで繋ごうとしていたため、httpと入力してもhttpsに接続しようとしていた?
正直分か

元記事を表示

Railsチュートリアル10章の内容をしっかり目に整理した【備忘録】

##はじめに
Railsチュートリアル10章の内容を、少しでも理解しやすくなるよう、割としっかり目に整理しました。
__備忘録です。__

##前提
Railsチュートリアル1〜9章までの内容が実装されている事。
##1.ユーザーの更新をする
####1-1.編集フォームを作成する。
 ●Usersコントローラにeditアクションを作成し、アクション内に処理を記述していく。
   ➡︎DBから適切なユーザーデータを取得する処理を記述する。
     →findメソッドにより送信されたユーザーIDから取得する。

 ●editアクションに対応するビューを作成する。
   ➡︎edit.html.erbファイルで処理を記述。
   ➡︎「/users/<ユーザーのid>/edit」というURLで、リクエストが送信されるように実装を行っていく。
     →form_forメソッドを使用し、@userを参照するよう記述する。
     →しかし、form_for(@user)という記述は、新規登録フォームと重複するため、パーシャルへ記述することにする。後述。

   ➡︎エラーメッ

元記事を表示

RailsにRspecを導入してみた

新しく開発をしようと考え、テストの方も勉強したいなと感じたのでメモがてらRailsにRspecを導入する方法まとめてみました。

##1 gemのインストール

“`ruby:Gemfile
group :deveropment, :test do
gem ‘rspec-rails’
gem ‘factory_bot_rails’
gem ‘rails-controller-testing’
end
“`

Gemfileに上記のgemを記述します。

##2 bundle install

“`
$ bundle install
“`

##3 Rspecに必要なファイルを作成

“`
bundle exec rails generate rspec:install
“`

すると以下のファイルが作成されます。

“`
.rspec
spec
spec/spec_helper.rb
spec/rails_helper.rb
“`

##4 Factory_botの設定

spec/rails_helper.rbの最下部に以下の記述をします

元記事を表示

railsチュートリアルの初デプロイ git push heroku master で躓き、解決

##状況
ターミナルで初デプロイしようにもうまくいかない。下記のようになってしまう。

“`
$ git push heroku master

(略)
remote: !
remote: ! Failed to install gems via Bundler.
remote: ! Detected sqlite3 gem which is not supported on Heroku:
remote: ! https://devcenter.heroku.com/articles/sqlite3
remote: !
(略)

“`
#解決

下記の記事を参考にして解決した。
https://qiita.com/MosamosaPoodle/items/7149aa66f1c087472777

用はなぜ成功(デプロイ)できなかったかというと、
herokuではsqlite3が使えないのに使おうとしているから。
(railsチュートリアルでは環境毎で利用するデータベースを使い分けている。
開発環境ではsqlite3を使用。本番環境(heroku

元記事を表示

RailsTutorial 6章 備忘録

#ユーザーモデルの作成
ここからはユーザー登録機能を作成していきます。しかし、ユーザーの登録機能を作る上では必ずデータの___永続性___が必要になってきます。そこでRailsでは___データを長期化するためにデータベースを使用します。___

#データベース移行
まず、データベースを使用するには___どういったデータをどのような形で保存していくかを決めるデータモデル(データの雛形)を作成します。___

“`
$ rails g model User name:string email:string
“`
このコマンドによってデータを保存するためのUsersテーブルとstring型のデータを保存するnameカラムとemailカラムが作成されました。
この時のポイントは2つ

– テーブル名の先頭の文字は大文字かつ単数形
– name属性とemail属性にデータ型を渡す

コントローラーを作成するときは複数形で作成したがモデルは単数形で作成すること!

![図 6.3: Userのデータモデルのスケッチ](https://qiita-user-contents.imgix.net/

元記事を表示

HTML、CSSで忘れそうだけど押さえておきたいこと

#CSS
HTMLと別のファイルで書くのが基本。

###大きさの単位
絶対的な大きさとしてpxが主流。しかしスマホの普及により、rem(html要素のフォントを1とした時の相対的な単位)を使用される

###色
色は#FFFFFFやrgb(255,255,255)などの方法で表される。
カラーコードでぐぐるとわかる

###idとclass
idは一度しか定義できず、CSSで読みだすときは#をつける。
classは複数回定義できるが、CSSで読みだすときは.をつける。またclassは複数所属可能なので、class = aaa bbbとしてやるとaaaとbbbに所属できる。

###優先度
親要素でCSSの内容を記述し、子要素でもCSSの内容を記述したとき子要素の内容が優先される
同じ要素のidのCSSの内容とclassのCSSの内容ならば、idのCSSの内容が優先される

詳しくはCSSセレクタの優先度に関してググると良い

###ボックスモデル

HTMLの要素はpadding border marginで囲まれている。
HTMLの要素自体の幅、高さをwidth、heightで表す

元記事を表示

【Rails】商品出品時にカテゴリテーブルのIDと紐づける方法

# はじめに
某プログラミングスクールで、フリマアプリのクローンサイトを作成中につまづきました。
内容としては、出品のタイミングでカテゴリを紐づけて投稿したいけど、そのidがうまく機能しないといったもの。困ったもんだ。

# やりたいこと
商品を登録するitemテーブルに、categoryテーブルの紐付けを行いたい。
categoryテーブルは`ancestry`というgemを使って作成しています。
ざっくり言うと、categoryテーブルの中で、親カテゴリ、子カテゴリ孫カテゴリが管理されてます。

テーブルの構成としてはこんな感じ。
ちょっとわかりにくいかも

| |nameカラム|ancestryカラム |
|:——|—————-|:—-:|
|親カテゴリ|メンズ、レディースなど|null|
|子カテゴリ|アウター、ボトムスなど|1、2など|
|孫カテゴリ|Tシャツ、スラックスなど|1/y、2/yなど|

`ancestry`カラムがnullのものが親カテゴリ
`ancestry`カラムが1だったり2だったりするものが子カテゴリ
`anc

元記事を表示

【Rails】単一テーブル継承(STI)について

# 執筆中

# 単一テーブル継承(STI)とは
STI(Single Table Inheritance)

同じカラム設計のテーブルを、一つのテーブルにまとめて、継承することで余計なテーブルを増やさず、DRYなテーブル設計にするというもの。
(テーブルが多いですねw)

考え方はクラスの**継承**と同じ!!

# 例

## 悪い例

## 良い例

図にも書いてある通り、authors、category、tagsは**擬似テーブル**であり、実在はしないテーブルになります。

実在はしないので、データは全て**taxonomies**に保管されます。

# Model

“`ruby:article.rb
class Article < ApplicationRecord belongs_to :category belongs_to :author has_many :article_tags, dependent: :destroy has_many :tags, through: :article_tags end ``` ```ruby:tax

元記事を表示

AWS 課金回避方法

AWS無料期間について

AWSのアカウントを作成してから12ヶ月間、以下のアプリケーションは無料で利用できます。

※12ヶ月が過ぎてしまうと課金が始まってしまうので注意が必要。

Amazon EC2

750時間/月 (t2.microインスタンスの使用もこれに含む)まで

Amazon S3:

5GBの標準ストレージ、20,000件のGETリクエスト、2,000件のPUTリクエスト

Elastic IPアドレス

実行中のインスタンスに関連づけられたElastic IPアドレスを1つだけ
インスタンスに紐付いていないElastic IPアドレスは全て課金対象

IAM

IAMユーザーの一時的なセキュリティ認証情報を使用して他のAWSサービスにアクセスするときのみ料金が発生
2つ目以降のインスタンスを作成する際の課金回避法

インスタンスを作成し直す際や、別のアプリケーションをデプロイするためには別インスタンスを立ち上げることになります。以下の手順を踏めば課金は解除できるでしょう。
手順

1.Elastic

元記事を表示

[rails]ストロングパラメータ受け取り時の400 bad requestの例と理由考察

#どんな事例

パラメータは投げ込めているのに受け取ることができないといったエラーでした。下記に詳細を示します。

エラー文(ターミナル上)の様子

“`
Completed 400 Bad Request in 70ms (ActiveRecord: 32.8ms)

ActionController::ParameterMissing (param is missing or the value is empty: delete_images_ids):

app/controllers/items_controller.rb:163:in `delete_image_params’
app/controllers/items_controller.rb:62:in `update’
“`

原因の記述とパラメータが投げ込まれている様子

“`javascript:app/assets/javascript/item_edit.js

$(‘#edit_item’).on(‘submit’, function(e){

// 通常のsubmitイベントを止め

元記事を表示

heroku apps は 5個までらしいです。

Ruby on Rails チュートリアル 5.1(第4版)を学習中。
学習途中におきた出来事をつらつら備忘録として書いているチラシの裏のようなもの。
Qiita見切り発車。たぶん動くからリリースしようぜって偉い人が言ってた。
見にくさも技術も良くなっていくと思います。たぶん。知らんけど。

“`
$heroku create
“`

createコマンドを実行したら以下のとおり言われてしまった。

“`
▸ You’ve reached the limit of 5 apps for unverified accounts. Delete some apps or
▸ add a credit card to verify your account.
“`

######(訳)
>ver未確認のアカウントのアプリ数の上限5に達しました。
>一部のアプリを削除するかaccountクレジットカードを追加して、アカウントを確認します。

無料のうちはアプリを5つ以上は作れないらしい。

“`
$heroku apps
“`

上記コマンドで、現在作成したapp

元記事を表示

【Rails】order

取得した値を並び替えるメソッドになります。

#orderとは
“`rb
create_table “posts”, force: :cascade do |t|
t.string “content”
t.datetime “created_at”, null: false
end
“`
通常、上記のような`Postモデル`だとデータベースに格納される値は昇順になります。

“`
:id => 1
:created_at =>3.days.ago
:id =>2
:created_at =>1.days.ago
:id =>3
:created_at =>Time.zone.now
“`
ただし、実際のアプリケーションであれば投稿を行う際に時間などは降順で表示されます。
そこで`order`を使用します。

以下は`order`を使用したサンプルになります。

“`rb
class Post < ActiveRecord::Base default_scope -> { order(created_at: :desc) }
end
“`
default_scope

元記事を表示

【Rspec】エラー文 undefined local variable or method `response’ for RSpecの解決法

以下のようにテストを書いたところ、次のエラー。

“`gyms_conotoller_spec.rb
require ‘rails_helper’

describe “indexメソッドが動く” do

expect(response).to render_template :index

end
“`

###エラー文

“`
undefined local variable or method `response’ for RSpec::ExampleGroups::Gyms::Index:Class
“`

##原因
そもそもfeature_specにはresponseオブジェクトがないから。

##解決法

controller_specでrenderオブジェクトを確認するテストをすればOK.
responceメソッドはcontroller_specのためだけにあります。

元記事を表示

active_hashを用いて都道府県データを表示してみた

##なぜactive_hashを使うのか?

都道府県のデータなど、変更される可能性が低いものをハッシュとして管理できるため、わざわざテーブルを作成する必要が無い

というメリットがあります。

今回の内容はフリマアプリでactive_hashを利用した際に、つまずいた点があったので、
備忘録としてまとめたものです。

##環境

Rails 5.2.3
Ruby 2.5.1

##導入方法

gem active_hashをインストール

“`
gem ‘active_hash’
“`
bundle installを実行。

1.png

active_hashのインストールが完了しましたので

続いてモデルの作成に移ります。

##モデルを作成

まずはaddress

元記事を表示

#Rails + rake で複数行のDescriptionを設定する、表示する ( display multiple lines description / describe with heredoc newlines )

# rake

lib/tasks/some_job.rake

“`rb
desc <<~DESC This job is so Great job DESC task some_job: :environment do # do something end ``` # describe descript オプションで全行表示される ``` bin/rails --describe some_job rails some_job This job is so Great job ``` # tasks 一覧だと一行だけ表示される ``` bin/rails --tasks ... rails some_job # This job ... ``` # Original by Github issue https://github.com/YumaInaura/YumaInaura/issues/3070

元記事を表示

コーディング未経験のPO/PdMのためのRails on Dockerハンズオン、Rails on Dockerハンズオン vol.15 – Deploy to Heroku

# はじめに
こんにちは!

今回は実際にここまで作ったアプリケーションをデプロイして公開してみます!
Herokuというサービスを使って、今まで開発してきたアプリケーションをデプロイしてみます。

ちなみに今回のハンズオンではGitコマンドを使用します(Herokuにソースコードをアップロードするときに使う)。各自の環境に合わせてGitコマンドをインストールしてから進んでください!(ググって!)

# 前回のソースコード
今回使うソースコードです(今まで作ってきたアプリです)。今回はこれをデプロイしていきますので、お手元にアプリがない方はこちらからダウンロードしてください。

– https://github.com/at946/rails_on_docker_handson/tree/vol.14

# Heroku
アプリを公開するには、サーバーが必要ですね。今ではサーバーも物理的にサーバーを用意するのではなくAWS、Azure、GCPなどのクラウドサービスのIaaSを利用して用意するのが一般的になってきているかと思います。
[Heroku](http

元記事を表示

RailsアプリにCircleCI2.1でCI/CDを導入する設定ファイル【初心者向け】

こんにちは、[ペーパーエンジニアのよしこ](https://twitter.com/K2_Yoshiko)です。

自作RailsアプリにCircleCIを使ってCI/CDを導入してから数週間が経過して、導入当初と比較して動作が安定しました。

私の場合、[CircleCI公式ドキュメント](https://circleci.com/docs/ja/2.0/)を基本として自分の環境を構築しましたが、
当時はCircleCI version: 2.1の新機能※ に対応した他環境の設定ファイルを参考にしたいと思ってました。

> ※ CicleCI vertsion: 2.1の新機能
> orbs / commands / executors

> 機能の説明は次の連載記事が分かりやすかったです。
> [「エンジニアのためのCI/CD再入門」連載一覧](https://codezine.jp/article/corner/754)

そこで今回、CI/CDを導入したい初心者エンジニア向けに、CircleCI2.1に対応した設定ファイルを公開したいと思います。

# 環境

“`
R

元記事を表示

OTHERカテゴリの最新記事