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

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

Rails チュートリアル 11章 独学学習メモ

こちらは『[Railsチュートリアル](https://railstutorial.jp/chapters/beginning?version=5.1#sec-introduction)』の独学学習のメモになります。

環境について
– Macを使用
– cloud9を利用

#第11章

これまでの実装では、アカウント登録をした時点で、すべての機能にアクセスができるようになっています。

しかし、安全性を考え、メールアドレスの持ち主か確かめるために、メールでの本人確認をしていきます。

そして、メールアドレスを忘れた時には、リセットの手段として、メールアドレスを使用するため、メールアドレスの本人確認がより重要になります。

#11.1 AccountActivationsリソース

具体的には、このようにしていきます。

>1.ユーザーの初期状態は「有効化されていない」(unactivated) にしておく。
2.ユーザー登録が行われたときに、有効化トークンと、それに対応する有効化ダイジェストを生成する。
3.有効化ダイジェストはデータベースに保存しておき、有効化トークンはメールア

元記事を表示

ぼくはこんな記事を書いてきた

記事タイトルは立花隆『[ぼくはこんな本を読んできた](https://books.bunshun.jp/ud/book/num/9784163510804)』のパロディー。
ふとマイページを見たら,これまでに書いた記事が 99 本であることに気づいた。
100 本目は何を書こうか。思いつかないので過去記事を振り返ってみた。
101 本目以降の記事も必要に応じて追記していくことにする。

# Ruby

やっぱり Ruby の記事が多い。

## 初心者向け

Ruby の初心者に知ってもらいたいこと。

* [Ruby のエラーメッセージを読み解く(初心者向け)その 1](https://qiita.com/scivola/items/3017068a354892b239f4)
エラーメッセージが読めるようになるのが中級への第一歩。
* [Ruby のエラーメッセージを読み解く(初心者向け)その 2](https://qiita.com/scivola/items/77017693de371ab49667)
この続きを書くつもりだが,果たせていない。
* [Ruby の文

元記事を表示

Dolphinというシングルユーザー用のActivityPub serverを立ててみた

activitypubというprotocolがあります。わかりやすく言うと、分散snsのprotocolです。このprotocolを使ったserverで有名なのはmastodonです。

今回、misskeyというmastodonに似たプロジェクトがあるのですが、その姉妹プロジェクトであるdolphinがシングルユーザー、つまり、お一人様インスタンスと呼ばれるサーバーに特化しているようなので、herokuで立ててみました。

https://github.com/syuilo/dolphin

“`sh
$ git clone -b master git://github.com/syuilo/dolphin.git
$ cd dolphin
$ cp .config/example.yml .config/default.yml
$ npm i

$ heroku create $APP_NAME
$ ls -a ./.git
$ heroku git:remote -a $APP_NAME
$ heroku buildpacks:set https://github.com/

元記事を表示

Rails6系にadmin-lte入れてHerokuにデプロイするとコケるエラーの解消法

## プッシュしたときのエラー内容
“`
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 4 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 21.87 KiB | 3.12 MiB/s, done.
Total 4 (delta 3), reused 0 (delta 0)
remote: Compressing source files… done.
remote: Building source:
remote:
remote: —–> Ruby app detected
remote: —–> Compiling Ruby/Rails
remote: —–> Using Ruby version: ruby-2.6.3
remote: —–> Installing dependencies using

元記事を表示

【解決】Herokuデプロイで躓いた1年前の自分へ

## railsでアプリを作ってこれからデプロイするところからのスタート!!

とりあえずherokuにログイン

“`
$ heroku login
“`

herokuにアプリ作成

“`
$ heroku create
“`

precompile

“`
$ rails assets:precompile
“`

herokuのbuildpackにrubyパッケージセット

“`
$ heroku buildpacks:set heroku/ruby
“`

herokuのbuildpackにnodejsパッケージ追加

“`
$ heroku buildpacks:add –index 1 heroku/nodejs
“`

ひとまずmasterにpush

“`
$ git add .
$ git commit -m ‘heroku’
$ git push origin master
“`

herokuへデプロイ!

“`
$ git push heroku master
“`

herokuでdb:migrate

“`
$ hero

元記事を表示

ローカル環境にRailsの環境を構築

はじめに

Ruby on Railsの環境構築に関する記事はたくさん存在するので、自分の備忘録的にメモ程度に残す

なぜ

Railsチュートリアルをやる上で、AWS Cloud9を使ってたんですが、ローカルにあったほうが便利じゃね?と思った
https://railstutorial.jp/

環境

OS:macOS Mojave

今の環境とRubyの準備

Rubyはrbenvでいれる。

“`bash
$ which ruby
/usr/bin/ruby
$ ruby -v
ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]
“`
こちらを参考に環境構築していきます。

rbenv を利用した Ruby 環境の構築

“`bash
$ brew install rbenv ruby-build

.

元記事を表示

deviseのみを用いて2つの異なるログイン機能を実装する方法(ruby on rails)

# はじめに

久しぶりの投稿になります。(最近コーディング以外のことをやっていたせいでqiitaに記事が書けなかった^^;)

ECサイトの開発でrails-admin等の管理者機能作成gemを使わずに、deviseのみを用いて管理者とユーザーのログイン機能を実装した時に思いのほか詰まったので備忘録がてらメモを残しときます。

開発環境
仮想環境:Linux(vagrant)
rails 5.2.3
ruby 2.5.7

##サンプルプロジェクトの作成
まずはrails newでサンプルとなるプロジェクトの作成を行いましょう。

“`ruby:コンソール
$ rails new devise-sample
“`
これでサンプルプロジェクトの作成完了です。

##deviseのインストール
まずはgemファイルにdeviseを入れてましょう。(私は毎回ファイルの一番下にdeviseを追加しています)

“`ruby:Gemfile
.
.
.
gem ‘devise’
“`

“`ruby:コンソール
$ bundle install
“`

“`ruby:コンソール

元記事を表示

Windows環境でVSCodeでのRuby on Railsの開発環境構築手順

※ Rubyの推奨環境はLinux?とはいえWindowsしか持ってないよ!って人向けです

# 1.Rubyのインストール

Rubyで開発する上で、最も必要なものはRubyのインストールなので
https://rubyinstaller.org/downloads/
からRuby + Devkitをダウンロードする

ダウンロードしたらexeファイルを実行してインストールをする

インストールしたら、
“`
ruby -v
“`
コマンドを実行、バージョンが表示されたならばOK
バージョンが表示されなければ、Rubyをインストールしたパスの下の/binフォルダにパスを通す

2.Git bashのインストール

https://gitforwindows.org/
からgitをダウンロードし、インストールする

3.VSCodeのインストール、環境整備

https://code.visualstudio.com/
より、VisualStudioCodeをダウンロードし
exeファイルを実行してインストールする

EXTENSIONSを選択し、Rubyを選択してこれもインストー

元記事を表示

やさしい図解で学ぶ 中間テーブル 多対多 DB データベース joinモデル 概念 【初級者用】

#中間テーブルって?

“join table もしくは junction table”とも呼ばれ、2つのテーブル(エンティティ)を結びつける、結合テーブルを指します。

とりあえず、下のER図を見てみましょう。

テーブルとテーブルの間にそれぞれを繋げるテーブルがあります。
これが”**中間テーブル**”です。(ER図の見方は[こちら](https://qiita.com/ramuneru/items/32fbf3032b625f71b69d))

スクリーンショット 2019-11-14 16.38.09.png

2つのテーブル、この場合coursesテーブルとusersテーブルの間に
### ” 多対多 ”
の関係性が生まれた時、マルチカラムアトリビュートを避けるため、1つの解決方法としてこの中間テーブル

元記事を表示

gem ‘devise’に苦戦 プログラミング 37日目

##gem’devise’使う上で考慮すべきこと
**1.URLかぶり**

例えばdeviseをuserモデルに紐づけてinstallしたりすると以下のような(一部)routesが自動的にできます。

**URLかぶりとは??**
userのアカウント情報を表示させるusers/showを作ろうと、get “users/:id” => “users#show”をroutesの設定しました。そうするとそれまでできていたlogoutがうまくいかなくなりました。その原因として考えた結論が、users/:idとdeviseで設定した他のusers/~~~が被ってしまっているということです。(あっているかは定か)

**usersはやめpages/:idにすることで解決しました。**

“`
new_user_session GET /users/sign_in(.:format) devise/sessions#ne

元記事を表示

Model名とController名が異なっていてもデータ移動はできるらしい 学習37日目

##〇〇モデルのデータは□□コントローラー上でも使える##

UserモデルのデータはUsersコントローラーで,Pageモデルのデータはpagesコントローラーでという**大きな思い込み**をしていた。(冷静に考えれば、application.html.erbはいろんなモデルからデータを取ってきている)

#勘違いしていたこと#

**1.モデルとコントローラーのデータのやり取りは、同じ名前同士で行う。←そんなことない!**

UserモデルのデータはUsersコントローラーで,Pageモデルのデータはpagesコントローラーでという**大きな思い込み**をしていた。(冷静に考えれば、application.html.erbはいろんなモデルからデータを取ってきている)

**2.controllerの内容を継承したければコピペする←それだけではない!**

確かにuserscontrollerの内容をそのままpagescontrollerでも使いたければ、コピペも1つの手段になる。しかしめんどくさいのでclassを継承をすれば良い(pagescontroller

元記事を表示

【AWS EC2】bundler -v -bash: bundler: コマンドが見つかりません

rbenvうっかり入れ忘れなので、下記のコマンドを入力すればOK。
バージョンはご自身の環境に合わせてください。

“`
$ rbenv install 2.5.1
$ rbenv global 2.5.1
$ rbenv rehash #rehashを行う
$ ruby -v # バージョンを確認
“`

元記事を表示

Rails Tutorialの知識から【ポートフォリオ】を作って勉強する話 #14 ユーザ投稿表示, ページネーション編

# こんな人におすすめ
* プログラミング初心者でポートフォリオの作り方が分からない
* Rails Tutorialをやってみたが理解することが難しい

前回:[#13 パスワード再設定編](https://qiita.com/aokyo17/items/28e12c9ad40cac9e528b)
次回:準備中

# 今回の流れ
1. 投稿用のモデルをつくる
* サンプル投稿を表示する
* テストをつくる

[Tutorial13章(第4版)](https://railstutorial.jp/chapters/user_microposts?version=5.1#cha-user_microposts)に突入しました。
今回はユーザ投稿の表示とページネーションを実装します。
(投稿機能は#15(準備中)で紹介します。)

# 投稿用のモデルをつくる
ここでの手順は以下の通りです。

* Micropostモデルをつくる
* Userモデルを編集する
* バリデーションを追加する
* Micropostモデルを改良する
* エラー時の日本語化を行う

## Micropostモデル

元記事を表示

メモ:minitest-reporters導入方法

書くことが無いので、rails testの結果が見やすくなるgem、「minitest-reporters」の導入方法をメモしておこうと思う。

#導入方法
Gemfileの「group :test do」の中に以下のように導入。

“`
group :test do
gem ‘minitest’
gem ‘minitest-reporters’
end
“`

加えて、test_helper.rbに以下の二行を追加。

“`ruby:test_helper.rb
require ‘rails/test_help’
require “minitest/reporters” #1行目
Minitest::Reporters.use! #2行目
“`
gem ‘minitest’にどういう役割があるのか、調べてもイマイチよくわからなかったが…
どうやらRailsのテストの方法はいくつかあるようで、minitestというのはそのうちの一つらしい。
今のところはminitest-reportersの前提modならぬ前提gem的な存在だと思っておくことにする(適当)。

元記事を表示

#Rails + #rspec OPTIONS request test by ActionDispatch::Integration::Session.proccess

# example

“`rb
describe ‘options’ do
subject { process :options, ‘/’ }

before { subject }

it { … }
end
“`

# Ref

[Perform HTTP OPTIONS request from Rails 5 for CORS pre-flight or otherwise – Stack Overflow](https://stackoverflow.com/questions/39840077/perform-http-options-request-from-rails-5-for-cors-pre-flight-or-otherwise)

[ActionDispatch::Integration::Session](https://api.rubyonrails.org/v5.1.1/classes/ActionDispatch/Integration/Session.html#method-i-process)

# Or

元記事を表示

eager_load + find_by でクエリが2回発行される件の対策

### 結論
よくある1:NのRelationがある時

“`ruby
class User < ApplicationRecord has_many :comments end class Comment < ApplicationRecord belongs_to :user end ``` ```ruby User.eager_load(:comments).find_by(id: 1) ``` とかすると 1. User.find_by(id: 1) のSQL 2. User.eager_load(:comments) のSQL の2回SQLが発行される ```ruby User.eager_load(:comments).where(id: 1).load.first ``` とかするとクエリが1回になる。 (`.load` は `.to_a` とかでもOK) ~~~ ruby 2.5.1 rails 5.0.6/6.0.1(下記ログは6.0.1のものです) ~~~ で確認済み。 #### 詳細 普通にやってみたりしたけど、どうして

元記事を表示

AWS Elastic Beanstalkで定期処理実行(cron)

## Heroku Schedulerでできたことを、Elastic Beanstalkでも行いたい
運用しているRailsアプリの本番環境を、HerokuからElastic Beanstalkに移行させました。
その際タスクの定期処理を行う方法で少し苦労したので、メモ的にシェアしておきます。

以前はHeroku Schedulerでrakeコマンドを呼び出せましたが、EBでそれを行うにはEC2内でcronを使うか、ワーカー環境でPOSTメソッドを呼び出す方法があるみたいです。今回は安く済ませたいので、前者を選びました。
後者の方法はこちらが参考になります。
https://qiita.com/tomoeine/items/38a9b2123e3afa1d5cd0

## 方法
このファイルを.ebextensionsに置くだけでOKです。あとは`eb deploy`すれば、自動でcronのファイルを作成し自動実行してくれます。
`eb ssh`で/etc/cron.dを確認してみてください。

“`configuration:.ebextensions/cron-sample.c

元記事を表示

またお前か mysql2 gemのインストール失敗

## 問題

これと関連がある記事を今まで2回作成しましたが、また新たな環境でmysql2 gemのインストールに失敗しました。
既存の方法ではないやり方で解決したので、記事を作成しました。

“`sh
Installing mysql2 0.5.2 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

current directory: /Users/jhpark/works/practice/js/react_with_rails/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.2/ext/mysql2
/usr/local/var/rbenv/versions/2.6.5/bin/ruby -I /usr/local/var/rbenv/versions/2.6.5/lib/ruby/2.6.0 -r ./siteconf20191115-56779-10cp3mw.rb extconf.rb
checkin

元記事を表示

link_to をブロックで囲って each で回す方法(link_to do ~ end)

“`Rails:user/index.html.rb

<% @users.each |user| do %>
  <%= link_to user_path(user) do %>
    <%= @user.name %>
  <% end %>
<% end %>

“`

上記のように、link_to do〜end で囲えば良い。

元記事を表示

[メモ]2019/11/15 Ruby on Rails

##Railsでページを表示するのには以下の3つのファイルが必要
ページの作成に必要なもの
・ビュー(View)
・コントローラ(Controller)
・ルーティング(routing)

1. ビュー(View)
 ビュー(View)とはページの見た目を作るHTMLファイル。
 ブラウザとのやり取りの中で,Railsからビューが返されページが表示される。

2. コントローラ(Controller)
ページを表示するときに、Railsではコントローラを経由してビューをブラウザに返す。
「rails g controller home top」を実行したとき、「home_controller.rb」というコントローラファイルが生成され、ファイルの中に「topメソッド」が追加される。
コントローラーのメソッドを「アクション」と呼ぶ。

メソッドとは、「オブジェクト(もの)の操作を定義したもの」
例)オブジェクト:マリオとすると
メソッド 操作
・ジャンプする。
・走る
・しゃがむetc…
3. ルーティング(routing)
ブラウザとコントローラを繋ぐ。

ページが表示されるま

元記事を表示

OTHERカテゴリの最新記事