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

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

VSCodeでRails開発

# VSCodeでRails開発

VSCodeで、主にRuby(Railsアプリ)を書く際のストレスを解消するために作った拡張機能を紹介します。

## Rails専用

### [Rails Routes](https://marketplace.visualstudio.com/items?itemName=aki77.rails-routes)
`config/routes.rb`の内容に応じて、URLヘルパの入力補完とジャンプが可能になります。
入力補完が効かない箇所でも、`railsRoutes.insert`コマンドによる入力が可能です。

![definition](https://i.gyazo.com/8ce05c897a84ab2b8d6b4d8e98e6858f.gif)

### [Rails Partial](https://marketplace.visualstudio.com/items?itemName=aki77.rails-partial)
パーシャルファイルの入力補完、ジャンプ、作成が可能になります。

![Definition](https:

元記事を表示

Railsチュートリアル 第12章 パスワードの再設定 – 前提

# 何をしていくか

「パスワードを忘れた」というユーザーのために、「パスワードの再設定」という操作ができるようにします。

## 「パスワードの再設定」とは

パスワードをダイジェストとしてRDBに保存している場合、ハッシュ関数の性質上、パスワードそのものを通知することはできません。そのため、「再設定」という操作が必要になります。大まかな手順は以下です。

1. パスワードを再設定するユーザーは、新たなパスワードをフォームに入力し、アプリケーションに送信する
2. アプリケーションは、1.で設定されたパスワードを元に新たにハッシュ値を生成する
3. 2.で生成したハッシュ値を、当該ユーザーの新たなパスワードダイジェストとしてRDBに保存する

## ユーザーの真正性を確認する方法

「第11章 アカウントの有効化」と同様の手順となります。

1. ユーザーは、パスワード再設定用リンクを受け取るためのメールアドレスをアプリケーションに送信する
2. アプリケーションは、パスワード再設定用のトークンとダイジェストの組を生成する
3. アプリケーションは、2.で生成されたパスワード再設定用

元記事を表示

まるで魔法だな(パーシャルをrenderし繰り返し処理をする)

#魔法かな??

これは**ユーザーの一覧**を取得したい!!(単一のユーザーを表す部分をパーシャルとして分けたい)って時に知って驚いたこと

###とりあえずeachを使ってみる
一覧表示ということでeachかな?ってことでこう書いた

“`ruby
<% @users.each do |user| %>
<%= render user %>
<% end %>
“`
実はこれ良くなくてパーシャルをrenderする際はeachを使うべきではないみたい
**@usersという変数がコントローラーにあることが前提になってしまう**ので、再利用性が低くなってしまい、せっかくパーシャルに分けたメリットが薄くなってしまうため。

###collectionを使ってみる
“`ruby
<%= render partial: 'users/user', collection: @users %>
“`
eachがダメなのはわかったのでcollectionで書いてみた これはキタかな?

しかし**残念☆**    良いんだけど冗長!!!
どうすればいいんだ、、、

###たどり着いた良

元記事を表示

Rails6のwebアプリをherokuでデプロイしてdb:migrateしたときのエラーを解決した話

# 目的

– コマンド`heroku run rake db:migrate`を実行したときに出たエラーの解決したときの話をまとめる

# エラー概要

– herokuにpush後にコマンド`heroku run rake db:migrate`を実行した際に下記のエラーが出た。

“`terminal
$ heroku run rake db:migrate
Running rake db:migrate on ⬢ study-record… up, run.3764 (Free)
rake aborted!
Mysql2::Error::ConnectionError: Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)
/app/vendor/bundle/ruby/2.5.0/gems/mysql2-0.5.2/lib/mysql2/client.rb:90:in `connect’
/app/vendor/bundle

元記事を表示

Rails6.0.1 + MySQL8.0.18をDockerで動かす(メモ)

**Rails6.0.1** + **MySQL8.0.18**を**Docker**で起動できたので、メモを残したいと思います。
本当に起動しただけなので、問題があるかもしれません。

* 開発環境
– macOS Catalina 10.15.1
– Docker Version 2.1.0.5(40693)

# プロジェクトディレクトリの下にファイルを用意する
myapp/
 ├ .env
 ├ docker-compose.yml
 ├ Dockerfile
 ├ Gemfile
 └ Gemfile.lock

“`:.env
MYSQL_PASSWORD=password
“`

“`yml:docker-compose.yml
version: ‘3’
services:
db:
image: mysql:8.0.18
command: “–default-authentication-plugin=mysql_native_password”
environment:
– MYSQL_ROOT_PASSWORD=p

元記事を表示

Rubyチャレンジはじめました

この記事は[アラタナアドベントカレンダー](https://qiita.com/advent-calendar/2019/aratana)の12日目の記事です。

昨日は、新原くんの[超便利ホスティングサービス Netlify](https://qiita.com/niihara_megumu/items/db8c53f0f5de9f377976) でした!

## はじめに
この記事は、個人のブログまとめです。
最近RubyとRailsのお勉強をはじめたのでその記事を貼ります。

## 期間
2019/12/6〜

## 場所
おうち

## 記事まとめ

– [Rails Challenge Day1](http://amyamyamy.hatenablog.jp/entry/2019/12/07/005415)
– [Day1 Feedback](http://amyamyamy.hatenablog.jp/entry/2019/12/08/204944)
– [Rails Challenge Day2](http://amyamyamy.hatenablog.jp/ent

元記事を表示

[Docker][Rails] Dockerを使ってRailsアプリを作る①~rails newするまで~

今回は初めてDockerを使い、Railsアプリを作っていくことにしました。

手順をメモしておきます。
手順は以下の方を参考にさせていただいております。

[[Rails] DockerでRails + MySQLの開発環境をつくる手順](https://qiita.com/jshimazu/items/ba13ce87dfdb11e2d1d9)

開発環境はmacで、Docker for macをインストール済みです。
1.アプリを置くディレクトリを作る
2.4つのファイルを作る
3.rails new する
4.ブラウザで表示させるまで

## 1.アプリを置くディレクトリを作る

“`ruby
mkdir matatabi_app(アプリの名前)
“`
まずはアプリを置きたいところにディレクトリ作ります。

## 2.4つのファイルを作る
`Dockerfile
docker-compose.yml
Gemfile
Gemfilelock`
この4つのファイルをmyappの下に作っていきます

“`ruby
vi Dockerfile
“`
中身はこのように書きまし

元記事を表示

管理者画面の作り方 admin Rails

##アプリの管理者と一般ユーザーで使える画面を分けたい!!
*なぜこんなことがしたいか?*
例:不適切なユーザーなどがいたら、管理者のみそのユーザーを削除したい。このようなケースを想定して管理者画面と一般ユーザー画面を作る必要があります。

***もともとあったController(例:postscontroller)とは別に /admin のURLにアクセスすると、
postsの一覧が出るようにしましょう(こちらは管理者がpostを管理するための画面。一般ユーザーはアクセスできない)***

1 . コントローラーを作成 [参考](https://kurose.me/namespace-admin/)

“`
bundle exec rails g controller admin::posts
“`

2 . routingを作成(indexも作成しといてください)

“`rb
get “/admin” => “admin/posts#index”
namespace :admin do
resources :posts
end
“`

3 .

元記事を表示

未経験がNuxt + Rails(API Mode) + AWS でプチ疎結合なポートフォリオを作って得たもの

# はじめに
こんにちは。今年新卒でメーカー系のSIerに入社しました、たからといいます。
入社前に通ったプログラミングスクールで開発の面白さを知ってしまったため、日々上達していくエクセルの腕にやきもきしている状態です。笑

#### アプリ開発のきっかけ
私が通っていたプログラミングスクール、CODE BASEのメンバー数人で、ハッカソンで作りかけだったアプリを完成させよう!!という話が持ち上がりました。その際に講師の方から勧められたBFF(Backends For Frontends)というアーキテクチャを使用した所、**フロント/バックエンドに分かれての開発が非常にスムーズにいき感動しました。**(BFFについては後述します)
スクールを卒業して以来Railsしか触っていなかったため、どうせなら新しい技術にも触れてみよう!ということでポートフォリオにもこのアーキテクチャで挑むことに決めた、という流れです。

# 作ったもの
### bugtter ばぐったー
発生したバグとその解決法がメモできる、プログラミング学習支援アプリです。
一度発生したバグや使ったコマンドなどを忘れた際

元記事を表示

チーム開発事前準備

#書いてあること
– Githubリモートリポジトリ共有方法(アプリ作成〜SNSグループ作成と連携)

1.ローカルで作って共有する方法

– 新規アプリ作成
– gitの管理下に置く
– リモートリポジトリ作成

~~2.リモートリポジトリで作って共有する方法~~

こちらの方法、試しましたが上手くいかず。確認中です

– 新規アプリ作成
– リモートリポジトリ作成

3.Github共有方法

– 招待する側
– 招待される側

4.SNSでチーム作成(今回はSlack)

– チャンネル作成
– チャンネル共有

5.GitHubの通知がSlackに飛ぶようにする

– 参考ページ

– 終わりに

#Githubのリモートリポジトリ共有方法
##1.新規アプリ作成をし、誰か一人がリモートリポジトリを作成する
– 新規アプリ作成

“`rails:ターミナル
$rails new 作りたいディレクトリ名 -d mysql 
“`
[Rails 新規アプリケーションの作成①](https://qiita.com/i-to-to-to-mi/items/8a7105f1adb

元記事を表示

【Rails】formで情報を登録する時、〇〇_idカラムから親要素の情報を取得して送信する方法

#環境
rails 5.2.4
ruby 2.5.7

#実装したい内容
子要素をformでデータベースに登録する際、selectでデータベースに既に登録されている、親要素を選択したい。

#具体的な状況
子要素→item
親要素→genre
itemsテーブルにgenre_idカラムを持つ。
form_withなどでgenre_idを登録したい。その時、genresテーブルに登録されたgenreのtitleを直接、選択できるようにしたい。

#書き方
[items/new]

“`
<%= form_with model:@item, url: admins_items_path, method: :post do |i| %>

name

<%= i.text_field :name %>

genre

<%= i.select :genre_id, Genre.all.map {|p| [p.title, p.id]}, :prompt => “選択してください” %>

<%= i.submit "submit!" %>
“`
selectを使うこと

元記事を表示

おれのYoutube学習サポートアプリになりゃあ 番外編 form_with

#form_with について

form_withの使い方ってあんまりネットに乗ってないので、自分の備忘録として書いておこう

“`
= form_with model: @note do |form| #この@noteはnewアクションで作ったインスタンス変数。今からこいつに対してcreateアクションするよ〜ってこと。
.header__form__titlebox
.header__form__titlebox__title
Title
= form.text_field :title, class: “header__form__titlebox__form” # どのカラムに入れる情報なのか教えてくれている。今回は、title
.header__form__contentbox
.header__form__contentbox__content
Content
= form.text_field :content, class: “heade

元記事を表示

おれのYoutube学習サポートアプリになりゃあ#4

#YouTube API の実装
今回やりたかったのは、YouTubeの API を呼び出して、検索ワードから任意動画ノートと紐つけること。

まず、トップページから検索用のviewに飛ぶようにリンクを設定したい。
① ルーティングとコントローラを作成する

コントローラ生成

“`
$ rails g controller youtube
“`
ルーティングを新たに設定

“`
resources :youtube do
collection do #member do もあるが、今回は特にidを使用しないのでこれでいく
get ‘search_movie’ #search_movie アクションを新たに設定。HTTPメソッドはyoutube データベースから情報を取ってくるから、GET
end
end
“`

“`
.headecontent
.headecontent__leftcontent
= link_to notes_path do
.headecontent__leftcontent__bigtitle

元記事を表示

大文字小文字を区別しないでActiveRecord(where)で取得する方法

# 大文字小文字を区別しないでActiveRecord(where)で取得する方法
■ モデル構造
スクリーンショット 2019-12-10 14.40.52.png

Personテーブルから名前がstevejobsのレコードを検索取得したい場合

“`
モデルクラス.where(“列名 LIKE ?”, “%値%”) # 値(文字列)を含む
“`
で取得できるので以下のように実装します。

“` ruby
Person.where(“name like ?”, “%stevejobs%”) # 値(文字列)を含む
“`
これでnameがstevejobsのレコードが取得できます。

しかし**検索する時に英語の大文字小文字を区別したいケースに遭遇しました。**

例) 人物テーブルからステーブジ

元記事を表示

Railsチュートリアル 第11章 アカウントの有効化 – 本番環境でのメール送信

# 前提条件 – HerokuにSendGridアドオンを追加する

Herokuにアドオンを追加できるようにするために、まずはHerokuにクレジットカード情報を登録します。

続いて、ローカル環境側で以下のコマンドを入力していきます。

“`
>>> pwd
~/docker/rails_tutorial_test/sample_app

heroku addons:create sendgrid:starter
Creating sendgrid:starter on ⬢ warm-woodland-62915… free
Created sendgrid-shallow-54936 as SENDGRID_PASSWORD, SENDGRID_USERNAME
Use heroku addons:docs sendgrid to view documentation
“`

無事HerokuにSendGridアドオンを追加できたようです。

# Railsアプリケーション側における、SendGridを使うために必要な設定

本番環境でSendGridを使う場合、prod

元記事を表示

prop(‘disabled’, false)を使ってもdisabled属性が消えない問題

# やりたいこと
jQueryで、

“`js
e.preventDefault();
“`
を使った後にsubmitボタンにdisabled属性が付いてしまうので、これを

“`js
prop(‘disabled’, false)
“`
を使って削除したい。

# 上手くいかないコード

“`js
$(document).on(‘turbolinks:load’, function(){
$(‘#new_item’).on(‘submit’, function(e){
var child_category = $(“#child_category”).val();
var grandchild_category = $(“#grandchild_category”).val();
if(child_category == “—” || grandchild_category == “—“){
e.preventDefault();
alert(‘カテゴリを選択してください’);
$(‘input[nam

元記事を表示

Rails Tutorial Memo #7

自分用の備忘録です.

# 12章 パスワードの再設定

#### 流れ
1. ログインフォームの「forgto password」リンクがクリックされる
2. メールアドレスの入力フォームが表示される
3. メールにパスワード再設定用のリンクが記載されている
4. 再設定用のリンクをクリックすると,ユーザーのパスワードを再設定してよいか確認を求めるフォームが表示される

## 12.1 PasswordResetsリソース

### 12.1.2 新しいパスワードの設定

パスワード再設定のデータモデルは,アカウント有効化の場合と似ている(第11章).記憶トークン(第9章)や有効化トークン(第11章)での実装パターンに倣って,パスワードの再設定でも,トークン用の仮想的な属性とそれに対応するダイジェストを用意する.

トークンをハッシュ化せずにデータベースに保存すると,攻撃者によってデータベースからトークンを読み出されたとき,セキュリティ上の問題が生じる.したがって,パスワードの再設定では必ずダイジェストを使用する.

再設定用のリンクはなるべく短時間(数時間以内)で期限切れになるよう

元記事を表示

rails new エラー Catalina

Catalina 10.15.1にアップグレード後
rails newで妙ななエラーが出たので
その備忘録を書きます。

# エラー内容
エラーと言ってもアプリそのものは作れるうえに
アプリ作成は最初のうちは問題なかったです。

赤字だけ紹介するとこのような内容でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430767/e58abb23-03e8-3c4c-f2f5-23a7e9a6db67.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430767/7582c38c-9232-fd56-2f50-8b3353109851.png)

# 対応方法
やることは二つ
①xcodeのインストール
②ソフトウェアアップデート
この2点です。

## ①xcodeのインストール
私はひとまずコマンドからインストールしました。
app storeでも無料されてるので、気になる人

元記事を表示

Railsチュートリアル 第11章 アカウントの有効化 – アカウントを有効化する

# これから行っていくもの

* AccountActivationsコントローラーの`edit`アクションの実装
* 当該アクションに対するテストの実装
* AccountActivationsコントローラーに関係するリファクタリング
* AccountActivationsコントローラーからUserモデルにコードを移していく

# `authenticated?`メソッドの抽象化

## 前提

### アカウント有効化リンクにおける`params`ハッシュ

“`
http://www.example.com/account_activations/C477rjyLBojP4v5nfKcoqQ/edit?email=foo%40example.com
“`

例えば上述のようなURLで`AccountActivations#edit`アクションを呼び出した場合、アカウントの有効化に必要な属性は、`params`ハッシュを使って以下のように参照できます。

* 有効化トークンは、`params[:id]`として参照できる
* メールアドレスは、`params[:emai

元記事を表示

Railsチュートリアル 第11章 アカウントの有効化 – /users と /users/:id に対する統合テスト

# 何について書いているか

Railsチュートリアル第11章、[演習 – 有効化のテストとリファクタリング](https://railstutorial.jp/chapters/account_activation?version=5.1#sec-exercises_activation_test_and_refactoring)のうち、3番目の演習内容について書いています。

> ここまでの演習課題で変更したコードをテストするために、/users と /users/:id の両方に対する統合テストを作成してみましょう。

# 統合テストの作成

テストの名前は`users_activation`とします。

“`
# rails generate integration_test users_activation
Running via Spring preloader in process 14164
invoke test_unit
create test/integration/users_activation_test.rb
“`

#

元記事を表示

OTHERカテゴリの最新記事