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

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

Ruby on Rails チュートリアル第9章 発展的なログイン機構

#発展的なログイン機構
第8章の記事ではでは一時cookieによるログイン機構を実装したが、本記事ではユーザーのログイン情報を記憶しておき、ブラウザを再起動した後でもすぐにログインできる機能 (remember me) を、永続cookieを使って実装していく。

##Remember me機能
 本節では、ユーザーのログイン状態をブラウザを閉じた後でも有効にする [remember me] 機能を実装していく。この機能を使うと、ユーザーが明示的にログアウトを実行しない限り、ログイン状態を維持することができるようになる。

###記憶トークンと暗号化
 前回は、Railsのsessionメソッドを使ってユーザーIDを保存したが、この情報はブラウザを閉じると消えてしまう。本節では、セッションの永続化の第一歩として記憶トークン (remember token) を生成し、cookiesメソッドによる永続的cookiesの作成や、安全性の高い記憶ダイジェスト (remember digest) によるトークン認証にこの記憶トークンを活用する。
 sessionメソッドで保存した情報は自動的に

元記事を表示

Cloud9にてRailsプロジェクトのDBを最初からMySQLにしておく方法

Cloud9にて新規プロジェクトを作成する

“`ruby:console
$ rails new project -d mysql
“`
エラーが出た場合は、エラー文に下記のようなコマンドが出てくるのでコンソールで走らせる

“`ruby:console
$ gem install mysql2 -v ‘0.4.10’ –source ‘https://rubygems.org/’
“`
プロジェクトのルートディレクトリに移動

“`ruby:console
$ cd project/
“`

“`ruby:console
$ sudo yum install mysql-devel
“`
バンドルをインストール

“`ruby:console
$ bundle install –without production
“`
mysqlを起動

“`ruby:console
$ sudo service mysqld start
“`
データベースを作成してマイグレートする

“`ruby:console
$ rake db:create
$ rake

元記事を表示

【rails】Mysql2::Error::ConnectionError【凡ミス系】

#あなたのブラウザではこのようなエラーが出ていますか?
“`
Mysql2::Error::ConnectionError
Access denied for user ‘root’@’localhost’ (using password: YES)
“`
484f05f97644782bbee9a9ebc0484481 (1).png

#修正した箇所
サーバーデプロイでうまくいかなく、いろんな方法をこねくり回していて、
その残留コードが残ってました。password:に設定したpassを削除したら再度見れるようになりました。

“`database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: 5
username

元記事を表示

RailsでPOST後の画面をリロードしたのにURLをGETしてしまうときの対処法

#概要
Ruby on Railsにおいてフォームでバリデーションエラーになったあと、その画面をリロードしたときに、URLへのリクエストメソッドがPOSTではなくGETになってしまうという問題が起きました。
どのようにしてその問題を解決すれば良いか、調べてもすぐにはわからなかったので、本記事ではその対処法などについてまとめます。

##環境
Ruby 2.6.4
Ruby on Rails 5.2.3
Turbolinks 5.2.1

#問題
####期待していた動き
フォームでバリデーションエラーになったあと、その画面をリロードしたときに、
画面上に「フォーム再送信の確認」というダイアログが出る。
スクリーンショット 2019-11-17 22.48.00.png

####実際の動き
URLへのリクエストメソ

元記事を表示

【Rails】Qiita 週間ストック数ランキング【自動更新】

## 他のタグ
– [【Ruby】Qiita 週間ストック数ランキング【自動更新】](https://qiita.com/kou_pg_0131/items/6e5603cb6155c1d91f71)
– [【Rails】Qiita 週間ストック数ランキング【自動更新】](https://qiita.com/kou_pg_0131/items/e94bfc7467c96ff2c7f2)

## 集計期間
2019年11月12日 ~ 2019年11月18日
## 1位 [やさしい図解で学ぶ 中間テーブル 多対多 DB データベース joinモデル 概念編 ](https://qiita.com/ramuneru/items/db43589551dd0c00fef9)
[`Rails`](https://qiita.com/tags/Rails) [`初心者向け`](https://qiita.com/tags/初心者向け) [`ER図`](https://qiita.com/tags/ER図) [`DB設計`](https://qiita.com/tags/DB設計) [`テーブル`](

元記事を表示

devise+ウィザード形式でのユーザ登録

##この記事で学べること
deviseを導入した状態でウィザード形式(画面遷移がある)のユーザ登録する方法
ウィザード形式での遷移時のバリデーションチェックをする方法

##概要
ウィザード形式の導入手順(sessionメソッドを使う)
deviseを導入しているときに自分でユーザ新規登録機能を実装するときの手順

新規登録→自分でコードを書く(ウィザード形式)
ログイン/編集/ログアウト→deviseのメソッドを活用
       ↓
sign_in/current_userなどのdeviseのメソッドを活用できる
自分で記述するコード量をへらすことができる

なぜdeviseのコントローラーをカスタムしないのか
→頑張ればできるかもだけど難しそうだし自分で実装したほうが楽な気がする?

スクリーンショット 2019-11-17 23.34.44.pngRailsチュートリアル(第14章)

# はじめに
だいぶ日が空いてしまいましたが、Railsチュートリアルの第14章のメモだけ残しておきます。

# RelationShipモデル
フォローとフォロワーを繋ぐ仕組みを作るために、Userモデル同士を繋げる「relationship」モデルを作成します。
以下のように、フォローしているユーザーIDとフォローされているユーザーIDを持ちます。
スクリーンショット 2019-11-17 22.50.48.png

作りたい関係性は、以下のように、relationshipモデルを通してUserモデル同士を繋ぐことです。
フォローしている関係を「active_relationships」、フォローされている関係を「passive_relationships」として、左右非対称の関係を区別します。

元記事を表示

[メモ]2019/11/17 Rails データベース

#データベースに保存したり取り出したりする方法を学んでいく

#データベースを用意しよう
データベースにデータを保存するにはテーブルを作成する必要がある。
1. データベースに変更を指示するファイル(マイグレーションファイル)を作成する。
2. データベースに変更を反映させる。

##1. データベースに変更を指示するファイル(マイグレーションファイル)を作成する。
マイグレーションファイルは「rails g model Post content:text」というコマンドで作成することができます。

####データベース テーブル作成コマンド
マイルレーションファイルというデータベースに変更を指示するためのファイルを作成しましょう。
postsテーブル、カラム名:content のファイルを作成するには、ターミナルに以下のようなコマンドで指示する。
「text」は「長い文字列」を意味しており。contentカラムにどのようなデータが入っているか意味している。
postsテーブルを作成する場合は「Post」と単数形にする。

“`terminal
$ rails g

元記事を表示

Rails開発する前にやっておくべきこと&便利なこと【備忘録】

# 背景
新しいアプリを開発する際、毎回忘れるので備忘録として

# rails new オプション
##### ※以下sample_appsというアプリを作成する場合

“`
$ rails _5.2.2_ new sample_apps
railsバージョン5.2.2で作成する
“`
“`
$ rails new sample_apps –database=使用するSQL名
SQLを指定し作成する
“`
“`
$ rails new sample_apps –skip-test
自動テスト機能を使用せず作成する
“`
“`
$ rails new sample_apps –skip-bundle
bundle install を初回実行せず作成する
“`

# Git
git initをしておきコミットしておく。

“`
$ git init
$ git add .
$ git commit -m “init Rails Project”
“`

# データベース作成
“`
rails db:create
“`

# ジェネレータの設定
ModelやC

元記事を表示

Railsチュートリアル 第10章 ユーザーの更新・表示・削除 – ユーザーを更新する

# そもそもこの章で何をするか

この章で新たに実装する要素は以下です。

* Usersリソースの以下のアクション
* `edit`
* `update`
* `index`
* `destroy`

「ユーザーを更新する」というセクションでは、`User#edit`の機能を実装し、「ログインユーザーが自身の登録情報を編集する」ことを可能にします。

# ユーザー情報更新

実装全体の流れは、新規ユーザー登録の流れと類似しています。

1. `edit`ビューを実装する
2. `PATCH`リクエストに応答する`update`アクションを実装する

|実装内容|新規ユーザー登録時|ユーザー情報更新時|
|——|——|——|
|ビューを出力するアクション|`new`|`edit`|
|使用するHTTPリクエスト|`POST`|`PATCH`|
|HTTPリクエストに応答するアクション|`create`|`update`|

大きな相違点は、「新規ユーザー登録は誰でも可能だが、ユーザー情報更新は当該ユーザーのみが可能である」というこ

元記事を表示

Railsヘルパーメソッド「simple_format」の使い方

## はじめに
– 今回は、simple_formatというヘルパーについて調べてみたので簡単に機能についてまとめていきたいと思います。

## simple_format とは
– simple_formatは、改行文字を含むテキストをブラウザ上で表示させる時に使われるヘルパーになります。simple_formatの機能について簡単にまとめます。

1. 文字列を`

`で囲む
2. 改行には`
`を付与
3. 連続した改行については、`

`を付与

## simple_formatの記述方法
RailsのERBファイルに埋め込む場合には以下のように記述します。

“`ruby
<%= simple_format(入力値) %>
“`

## simple_formatについて検証

まずは、simple_formatを記述しなかった場合はこのようになります。

“`ruby:simple_formatを記述した場合
# 入力値
simple_formatがある場合とない場合について検証します。\n
まずは、si

元記事を表示

【Rails】accepts_nested_attributes_forを使って子モデルも一緒に保存する

こんばんは!スージーです。
個人アプリの中で勉強になった部分があったので備忘録として。

## accepts_nested_attributes_for
>参考:Rails API
https://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

userが投稿する時に関連付けられたモデルも一括保存できます。

## DB設計

### Usersモデル

| Column | Type | Options |
| ——– | ———- | ——————— |
| email | varchar | null: false |
| nickname | text | null: false |
| profile | text | null: false |
| image | text

元記事を表示

Rails5 CSVファイルを使用して都道府県名及び市区町村名をデータベースに保存

 現在、Ruby on Rails を使用し、自作アプリを制作している中で、都道府県及び市区町村のDBが必要となったため、試しに作成したDBの作成手順を下記のとおりまとめます。
 今回は[@ultrasevenstar](https://qiita.com/ultrasevenstar/items/bcf1601e2269e46e1e9b)さんの投稿を参考とさせていただきました。
 エンジニアになることを目標に開発を進めているため、説明や手順に間違いや不足している箇所が見られると思いますので、ご指摘いただけると幸いです。
 
 作成手順
  ① CSVファイルの取得
  ② モデル・テーブルの作成
  ③ データの読み込み・保存

## Ⅰ.作成するテーブルのイメージ
・(都道府県)prefecturesテーブル(created_at,updated_atカラム省略)

|id   |name |
|:——|:—–|
|1    |北海道|
|2    |青森県|
|3    |岩手県|
|4    |宮城県|
|5    |秋田県|
|以下省略| ―  |

・(市区町

元記事を表示

【88日目】AWS Cloud9でMySQLで新規Railsアプリを立ち上げる際のエラー

つい先日までパーフェクトPHPガーなどと言っていたのに突然のRailsで申し訳ありません。
実は神里さん(@yoshito410kam)という方のオンラインサロンで[「チーム開発が経験できる」プログラミング初学者向けの企画](https://note.mu/yoshitokamizato/n/ne9fb7cd06b46)がある(現在は募集中断?)とのことで、言語は違ったのですが、思い切って参加しました。

チームでgitのブランチを切ってプルリクやマージを活用する経験は一人ではなかなかできないため、自分の学習を中断してでも参加する価値があると考えたからです。

まずチーム開発を開始する前に課題があるとのことで、その課題をやる必要があるため、パーフェクトPHPは一旦中断となります。

==================================================================================
# MySQLのインストールのエラー
さて、早速環境構築でつまづきました。
Cloud9でMySQLを使ってRailsアプリを新規作成して、H

元記事を表示

imgixで遅延ロードを実装してみる

最近 [PageSpeed Insights](https://developers.google.com/speed/pagespeed/insights/) を試したら、ものすごく低い点数が出て悲しかったのですが、その時に画像を遅延ロードさせるといいと出ていたのでやってみました。

自分が関わっているサービスは画像の表示に[imgix](https://www.imgix.com/)を使っているので、まずはimgixが対応しているかの調査から行いました。

対応してそうです。
https://blog.imgix.com/2016/05/02/imgix-lazysizes

やったことは大きく分けて以下の二つになります。

– 遅延ロード用ライブラリの導入
– 遅延ロード用にタグを調整するヘルパーメソッドの作成

ちなみに、今回遅延ロードを導入したサービスはRailsで作られています。

## 遅延ロード用ライブラリの導入

ライブラリ自体はいろいろあるようですが、上の記事で lazysizes が紹介されていたのでそちらを使わせていただきました。
https://github.

元記事を表示

Railsでアクション名を間違えてcontrollerを作成した時の対応

『現場で使えるRuby on rails5 速習実践ガイド』
学習中にコントローラー作成時にアクション名を間違えて作成した時の対応
自分的備忘録です。

ActionController::UnknownFormat
—————————————
Chapter3 「タスク管理アプリケーションを作ろう」
コントローラー作成後「ActionController::UnknownFormatエラーに遭遇
![スクリーンショット 2019-11-17 12.54.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459202/6812dcb9-afa3-67c8-8eaa-47d3b5a0350a.png)

“`ruby:routes.rb
Rails.application.routes.draw do
root to: ‘tasks#index’
resources :tasks
# For details on the DSL availa

元記事を表示

Rails6から採用されたZeitwerkが最高だった

# はじめに
Rails6がリリースされて早3ヶ月、

先週、大きめの案件が終わって暇になったので、社内のプロジェクトを全てRails5からRails6にアップデートしました。アップデート作業に伴い Zeitwerk について調べたところ、最高のGemだったのでまとめます。

# Zeitwerkとは
Zeitwerk (読み方: ツァイトヴェルク) とは新しく開発されたオートロードの仕組みです。Gemとして独立しており、Railsに限らず様々なRubyプロジェクトで利用可能です。

### なぜ開発されたのか?
Rails で 古くから採用されてきた `const_missing` を利用したオートロードの仕組みには、処理順序によって発生する不具合など、エッジケースな落とし穴がいくつかありました。

Zeitwerkはそういったレガシーなオートロードの仕組みを改善する目的で開発が始まり、エッジケースの解消はもちろん、パフォーマンスに優れ、スレッドセーフで、汎用的に利用可能なオートローダーとしてリリースされました。

### 由緒正しき Kernel.#autoload
Zeitwe

元記事を表示

#Rails + #rspec : How to use “change” syntax with not_to condition Trick

One idea. use change syntax and expect “not to change”.

# BAD

“`rb
it do
expect { subject }.to change { some }.to(true).and_not_to change {
some.count
}.by(0)
end
“`

# GOOD

“`rb
it do
expect { subject }.to change { some }.to(true).and change {
some.count
}.by(0)
end
“`

# Rspec の change 記法で not_to の否定文をチェーンできない or しづらいので無理やり肯定系で書いてみるのはいかが?

# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/2727

元記事を表示

引数と戻り値の関係は、◯◯と◯◯だ。

#引数と戻り値ってなんだよ

数学とか高校で嫌いになった文系勢には、数って聞くだけで抵抗感あるわ…

関数に入れる値を引数、返ってくる値を戻り値っていうらしい。

#身近にある引数と戻り値は「消費税」

消費者としては、全然嬉しくない「消費税」だが教材としては身近にある優秀な例である。
2019年10月まで消費税は一律8%でした。
皆さんも普段から接してますよね。俺は払わないなんてできないんで、多分わかりやすい実例です。
100円の物を買うと108円になりますよね。これを敢えて式に起こすとこうなります。

“`
100×1.08(+8%)=108円
“`

これを関数化するならば、

“`
X×1.08=1.08X
“`
という式になりますよね。

この時、関数に入れるXは引数、1.08Xというのは戻り値になるわけです。

“`
引数 × 1.08 = 戻り値
“`

ってなわけですな。
これはとてもわかりやすい。

#もっとわかりやすくしてくれ

飯食ったら、うんこになるだろう?
それくらいはわかるだろう。

関数っていうのはルールなんだ。
人間の体もルールに基づいて

元記事を表示

Rails と Java Servlet + JSP によるWEBアプリ開発の比較

### Rails と Java Servlet + JSP によるWEBアプリ開発の比較

||Rails|Java Servlet + JSP|
|—|—|—|
|Model|XXX.rb|XXX.java|
|View|XXX.erb|XXX.jsp|
|Controller|XXXController.rb|XXXServlet.java|
|ルーティング|routes.rbで指定|XXXServlet.javaのアノテーションで指定|

### ルーティングの指定方法
#### Rails
routes.rbで指定

“`ruby:routes.rb
Rails.application.routes.draw do
get ‘/sample’ => ‘コントローラ名#アクション名’
post ‘/sample’ => ‘コントローラ名#アクション名’
end
“`

#### Java Servlet + JSP
XXXServlet.javaのアノテーションに指定

“`java:XXXSerblet.java
package src;

imp

元記事を表示

OTHERカテゴリの最新記事