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

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

Vagrant+Rails6+MySQL 開発環境構築

# はじめに
– なんか網羅したような題名にしましたが、以前書いた「Vagrant+Rails6+PostgreSQL12 開発環境構築 まとめ」のMySQL版です。
– [「Vagrant+Rails6+PostgreSQL12 開発環境構築 まとめ」**2.9 PostgreSQLインストール**](https://qiita.com/KZ-taran/items/56c1d39dbbdd26df6faf#29-postgresqlインストール)の部分の差し替えなので、それ以外の部分はそちらを参考にしてください。

# MySQLインストール
## MySQLインストール

“`sh
# MySQLのyumリポジトリから、最新のCentOS7用のリポジトリを追加
$ sudo yum -y install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

# MySQL Community Serverのインストール
$ sudo yum -y install mysql-commun

元記事を表示

RailsでActionView::MissingTemplateエラーが発生した場合の対応

## 現象

Railsで500エラーが発生し、エラーログにはActionView::MissingTemplateと書かれていました。
media/ads/show.erbは存在し、これまで問題なく表示できていたURLだったので、なぜ??となりました。

エラーログの:formats=>[“image/*”]を見る限り画像のテンプレートを探しに行ってしまっているようなのですが、URLに`.png`や`.jpg`などの拡張子が付いている訳でもありませんでした。

“`
ActionView::MissingTemplate (Missing template media/ads/show, media/application/show, application/show with {:locale=>[:ja], :formats=>[“image/*”], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :coffee, :jbuilder]}. Searched in:
“`

## 結論

acce

元記事を表示

【Rails】RSpecのSystem Test実行前に前回テスト時のScreenshotを削除しておく

# Abstract
RSpec3.8以降のSystem Testは特に気にせずともテストNG時にscreenshotを保存してくれる。
とても便利なのだけど、ほっておくとscreenshotがいっぱいになり、いざ今回のテストで失敗した箇所を探そうとしても埋もれてしまうことがある。

いちいち`rm`を打ってから`rspec`するのも面倒なので、
今回は、RailsでRSpecを実行する時に、前回までのscreenshotを自動で削除するようにするメモ。

ベースアプリは –> [Rails on Docker(alpine)でdocker-seleniumを使わないでSelenium+RSpec+Capybaraでテスト自動化してみる – Qiita](https://qiita.com/at-946/items/6def89bb94f748ad97f2)

# 注意事項
1回ファイルパスを間違えて、rspec実行したら全てのファイルが消えた、という事件が起きたので注意してください…gitから戻せたのでよかったですが…

# FileUtilsを使う
Rub

元記事を表示

slimでHTML5のフォームバリデーションを使う

Ruby on Railsのテンプレートエンジンとしてslimを使った場合のHTML5の入力値チェックの書き方を調べてみました。

## 対象
Rails、slimの初学者

## 環境
– Ruby on Rails 5.2.3
– slim 4.0.1
– Bootstrap 4.3.1(以下の例はBootstrapを適用したformです)

## 入力値チェック/制限方法
### required属性による入力必須制約
以下のように`required: true`を追加します。

“`bash:required属性
= form_with model: user, local: true do |f|
.form-group
= f.label :name
= f.text_field :name, class: ‘form-control’, required: true
“`
### pattern属性による入力値のパターン制約
以下のように`pattern: `を追加します。

“`bash:pattern属性
= form_with model: us

元記事を表示

Railsのcreateメソッドは保存に成功しても、失敗してもモデルオブジェクトを返す

Railsのcreateメソッドは、オブジェクトの作成と保存を同時に実行できます。
注意点として、createメソッドは保存に成功しても、失敗してもモデルオブジェクトを返すので、saveメソッドのようにif文で保存成功可否を判定しようとすると、どちらの場合も必ず真になります。

# 環境
“`
$ rails -v
Rails 5.1.7
“`

# 検証
Userモデルの保存時に、nameを必須にします。

“`ruby:user.rb
class User < ApplicationRecord validates :name, presence: true end ``` createメソッドは保存に成功しても、失敗してもモデルオブジェクトを返します。 ```ruby # 保存成功 User.create(name: "testuser") => #

# 保存失

元記事を表示

Dockerで構築したrailsイメージの軽量化

## 概要
先日Railsアプリの開発環境にDockerを導入しました。
しかし[入門Dokcer](https://y-ohgi.com/introduction-docker/2_component/image/)を見てみると、どうやら記述方法次第や指定するイメージによって軽量化できるとのこと

## Dockerの設定記事
先日僕が書いて投稿した記事の中で出てくるDockerfileを参考に書いていくので、一度目を通しておいてください。
[作成したRailsアプリケーションでDocker環境構築](https://qiita.com/AK4747471/items/39ddacfde6a235103277)

## Dockerのイメージを軽量化するメリット
僕は業務未経験なので[参考書](https://www.amazon.co.jp/Docker-Kubernetes-%E5%AE%9F%E8%B7%B5%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E9%96%8B%E7%99%BA%E5%85%A5%E9%96%80-%E5%B1%B1%E7%

元記事を表示

ドットインストールのRuby on Rails 5 入門を履修する際に自身が体験したエラーの一例集

#初投稿にあたって

 初投稿がいきなり失敗談から入る点やドットインストールのRubyの入門の項目を無視していきなりRuby on Railsの項目から入る点などツッコミどころはたくさんあるとは思いますが、どうかご容赦ください。

#今回の投稿の理由
 とりあえずの初投稿ではありますが、今回の投稿の目的としては

・Qiitaへの投稿に慣れるための第一歩の練習としての投稿
・単純に備忘録として初心を忘れないようにメモしておきたかった
・失敗談を共有することである程度他者の参考になればという思い

 以上の点で記録を公開しようと思いました。

 自己紹介の記事がまだ無かったりプロフィール等が充実して居なかったりでどういう人物かも分かりにくいだろうとは思いますが、自分は今年の6月頃からRuby、HTML、CSSなどをドットインストールやProgateなどで学び始めたプログラミング勉強歴2ヶ月目の初学者だという認識で見てもらえればと思います。

 ではいきなりではありますが、早速以下よりエラーのパターンと自身が経験したその解決策の一例を挙げていきたいと思います。初心者ゆえ至らぬ点や言葉足ら

元記事を表示

undefined method `read’ for “lilskies.jpg”:Stringの解決方法を教えてください

ユーザーが自分の画像を変更できるようにしようとしたのですが、どうしてもundefined methodになってしまいます。
解決方法を教えてください。
画像の変更を入れるとエラーになります。

““
user_controller.rb

def update
@user = User.find_by(id: params[:id])
@user.name = params[:name]
@user.email = params[:email]
@user.nameID = params[:nameID]
@user.message = params[:message]
@user.image_name = params[:image]
if params[:image]
@user.image_name = “#{@user.id}.jpg”
image = params[:image]
File.binwrite(“public/user_images/#{@user.image_n

元記事を表示

Railsチュートリアル 第8章 基本的なログイン機構 – ログイン

# 何を実装するか

今までに、「ログインフォームで無効な値が送信された際の処理」については実装できました。次に実装するのは以下の動作です。

* 有効なメールアドレスとパスワードの組でログインできるようにする
* cookiesを使った一時セッションでログイン状態を保持できるようにする
* 有効期限はブラウザウィンドウが閉じられるまでである
* 実際にログイン中のユーザーのユーザー情報を活用する

# Sessionヘルパーモジュール

* 実体は`app/helpers/sessions_helper.rb`である
* `rails generate controller sessions`により自動生成される
* 全てのビューに自動的に読み込まれる
* 全てのコントローラで同モジュールを使えるようにするには、`app/controllers/application_controller.rb`に`include`すればOK
* セッションに関する機能は多くのコントローラで使うので、この処理の有用性は高い

“`diff:app/controllers/appli

元記事を表示

【Rails】ancestryを使って動的なセレクトボックスを作る方法

[ancestry](https://github.com/stefankroes/ancestry)というGemを使うと階層カテゴリを簡単に作ることができます。今回はancestryを使いつつ、動的なセレクトボックスを作る方法をご紹介します。

完成イメージは以下の通りです。
![dynamic_select.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348703/ab367545-aada-7340-1de4-7b4fea6fa96d.gif)

今回使用したコードはGithubからも見れるようにしておきました。
[ancestry-sandbox](https://github.com/kenzoukenzou/ancestry-sandbox)

## 前提

– ruby-version: 2.6.3
– rails-version: 6.0.0

## 準備

### ancestryをinstall

まずはGemのinstallから行います。テストデータを作成するための`seed

元記事を表示

Railsチュートリアル12章のRestFulルーティングについて整理

# Railsチュートリアル12章のルーティングは複雑

Railsチュートリアル12章では、パスワードの再設定を行う
1.メールアドレス送信画面(パスワード再設定を行いたいユーザのメールアドレス)を表示する
2.メールアドレス送信画面でメールアドレスを送信する
3.パスワード再設定画面を表示する
4.メールアドレス送信画面で新しいパスワードを送信する

というざっくりと、4つの操作がある

## 4つの操作、4つのURL

| HTTPリクエスト | URL |Action |名前付きルート |
|:—————–|:——————|:——————-|:——————-|
| GET |/password_resets/new |new|new_password_reset_path|
| POST |/password_resets |create |passwor

元記事を表示

[Rails] いつも使用しているGemfileのテンプレを公開します

2019年の春頃に作成したGemfileのテンプレです。
Gem使用のヒントとしてや、そのままGemfileのテンプレとして良ければご利用ください。

– データベースはMySQLとしています。
– バージョンなどは適宜置き換えてください。

“`ruby:Gemfile
source ‘https://rubygems.org’

git_source(:github) do |repo_name|
repo_name = “#{repo_name}/#{repo_name}” unless repo_name.include?(“/”)
“https://github.com/#{repo_name}.git”
end

# 基本ツール
gem ‘rails’, ‘~> 5.2.3’
gem ‘mysql2’, ‘>= 0.4.4’, ‘< 0.6.0' gem 'puma', '~> 3.11′
gem ‘sassc-rails’
gem ‘uglifier’, ‘>= 1.3.0’
gem ‘coffee-rails’, ‘~> 4.2’
gem ‘jbuilder’

元記事を表示

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

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

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

#第8章

ログインとログアウトの機能を整えていきたいと思います。

#8.1 セッション

HTTPを使用しているとユーザー情報を一時的に保持ができないので、cookiesを使って、セッションを実装し、ユーザー情報を一時的に保存していきたいと思います。

“`
$ git checkout -b basic-login
“`
トピックブランチを作成します。

##8.1.1 Sessionsコントローラ

newコントローラを作成していきます。

“`
$ rails generate controller Sessions new
“`

ルートを新しく追加します。
newアクションは、ログインフォーム。
createアクションは、postリクエストがあると、ログインを実行。
deleteアクション

元記事を表示

CSSメディアクエリ メモ

“`ruby:application.css


@media screen and (min-width:480px) {
.aaa{
color: red;
}
}
@media screen and (min-width:768px) and ( max-width:1024px) {
.aaa{
color: blue;
}
}
@media screen and (min-width:1024px) {
.aaa{
display: none; /*見せない*/
visibility: hidden; /*divは存在すけど表示なし*/
}
}
“`

“`erb:view/home/top.html.erb
….

ここがレスポンシブ対象

….
“`

元記事を表示

ボタンを条件に応じて非活性にする

#いきさつ
ボタンを非活性にする方法はいろいろあるものだなぁと思ったのでまとめておきます。

#非活性の条件
今回は非活性の条件を下記のようにします。

“`ruby
CONDITION_DAY = 11
Date.today.day < CONDITION_DAY && hoge.blank? #hogeは配列 ``` 今日の日付が1~10日であり、hogeに要素がない場合はボタンを非活性状態にします。 #html.erb ```erb <%# クラスはbootstrapを使用した場合のもの %>

<%= link_to 'ボタンです', {controller: :hugas, action: :piyo}, class: 'btn btn-primary btn-block', id: 'submit-btn' %>
“`

#css
bootstrapを使えばクラスに’disabled’を指定すれば非活性となりますが、
使用していない場合は次のcssを書くものとします。

“`css

a.disabled{
pointer-events: none;

元記事を表示

Ruby on Rails, Vue.js によるモダン WEB アプリケーション 実践編 (その3)

# はじめに

アプリケーションは Rails と Vue.js を想定して、実戦的なアプリケーション動作環境を構築するための方法を段階的に紹介していきます。

Rails と Vue を使ったアプリケーションを初めて開発する場合は [Ruby on Rails, Vue.js で始めるモダン WEB アプリケーション入門](https://qiita.com/tatsurou313/items/4f18c0d4d231e2fb55f4) も参考にしてみて下さい。

# アプリケーションの機能

* [(その1) アプリケーションは冗長構成の Postgres に接続できる](https://qiita.com/tatsurou313/items/b7b0bbabd1d61baccbb3)
* [(その1) アプリケーション、DB は k8s にデプロイされる](https://qiita.com/tatsurou313/items/b7b0bbabd1d61baccbb3)
* [(その1) LE証明書を使う(定期更新できる)](https://qiita.com/tatsurou

元記事を表示

#Ruby や #Rails で 西暦 年月日を 自前でバリデーションする的な処理 ( Date.parse )

日付のstringに対して Date.paras する

# Ruby では require が必要

“`rb
require ‘date’
“`

# 成功ケース

8桁の数字でも ハイフン区切りでも スラッシュ区切りでも

なんとドット区切りもできた

“`rb
[21] pry(main)> Date.parse(‘20200229’)
=> #

[34] pry(main)> Date.parse(‘2020.02.29’)
=> #
[35] pry(main)> Date.parse(‘2020/02/29’)
=> #
[36] pry(main)> Date.parse(‘2020-02-29’)
=> #

元記事を表示

Rails on Docker(alpine)でdocker-seleniumを使わないでSelenium+RSpec+Capybaraでテスト自動化してみる

# Abstract
以前、Rails on Dockerで[docker-selenium](https://github.com/SeleniumHQ/docker-selenium)を利用してSelenium+RSpec+Capybaraのテストを実行する方法をメモしてました。
–> [Rails on Dockerにて、Headless ChromeでSystem Testをやってみた。 – Qiita](https://qiita.com/at-946/items/e96eaf3f91a39d180eb3)

System testは記事でもメモった通り色々と便利。

ただ、Railsアプリケーションが動くコンテナ内でテストを完結することができたのでそちらのメモを残します。

コンテナのベースは以下のRails on Docker(alpine linux)で。
–> [Rails on DockerのQuickstartをalpine linuxでやってみる – Qiita](https://qiita.com/at-946/items/c69a512ea4794174

元記事を表示

railsのエラー: テーブル作成

今日はちょっとデータベース作成をやってみた。

まずデータベースの作成の作りかたを細かいところを
省略して説明すると。

⚪️その1
rails d model モデル名

で前提となるモデルを作成

⚪️その2

出来上がったマイグレーションファイルから

[![Screenshot from Gyazo](https://gyazo.com/6ba6c81f013e8a6873db7a31d39c9015/raw)](https://gyazo.com/6ba6c81f013e8a6873db7a31d39c9015)

こんな感じでテーブルの中身のカラムをかく

⚪️その3

rake db:migarate

でテーブルを作成。

それで本題のエラーは

①bundle exec 未使用

その3で bundle exec rake db:migrate
という形式でやらないとエラーがおきた。

②カラムの追加とrollback

rails generate migration addcolumn+クラス名

で新たにマイグレーションファイルを作成して

def ch

元記事を表示

#Ruby の Faraday とは? get リクエストで https 接続してみる例

# Faraday って何よ

Ralsで使われているけど、ほとんど何してるか知らなかった。

ネットワーク接続まわりの何かだという漠然としたイメージだった。

HTTP クライアントだということさえ知らなかった。生きててごめんなさい。

>Simple, but flexible HTTP client library, with support for multiple backends.

[lostisland/faraday: Simple, but flexible HTTP client library, with support for multiple backends.](https://github.com/lostisland/faraday)

# インストール

“`
gem install faraday
“`

# get リクエストを送ってみる

https アクセスするにも1行で書ける。

“`
Faraday.get(‘https://example.com’)
“`

これだけ。

あー、あの Rails でもよく見るやつだ!

(と思っ

元記事を表示

OTHERカテゴリの最新記事