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

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

Cloud9でRailsのバージョンを上げる

# 環境
Cloud9

# 手順

Cloud9でRailsを動かそうとしたところ、最新の環境が入っているものと思いきや、デフォルトで入っているバージョンが5.0.0であった。

実は、5.2を利用したかったので、バージョンを上げる事とする。

“`cmd
$rails -v
Rails 5.0.0

$gem list rails
rails (5.0.0)
“`

バージョンを上げるには、最新のバージョンを追加でインストールして、
既存のバージョンと同居させる事となる。古いバージョンが上書きされる事はありません。

“`cmd
$gem install rails

$rails -v
Rails 6.0.2.2
“`

インストールしたが、バージョンを指定しなかったので、この時点最新のバージョンがインストールされる事となる。実は、5.2をインストールしたかったため、バージョンを指定して、再度、インストールする事に。

“`cmd
$gem install -v 5.2 rails

$gem list rails
rails (6.0.2.2, 5.2.0, 5.0.

元記事を表示

railsを勉強し始める際に知った方がいいものメモ

# この記事の目的

– 対象:これからrailsを始める人
– 目的:railsの勉強してて当然のように出るよく分からん概念、言葉を網羅的に先に知っておく

# REST

この記事が分かりやすかったです

「REST理論をわかりやすく。」
https://qiita.com/geshi/items/5275cc9d089105625c5f

## railsにおけるREST

railsチュートリアル
https://railstutorial.jp/chapters/toy_app?version=5.1#cha-a_toy_app

railsチュートリアルのコラム2.2がわかりやすい。railsでのRESTはアプリケーションを構成するコンポーネントを下記に対応させること。

– RDBMSのCRUD(Create/Read/Update/Delete)
– HTTPRequestの各メソッド(GET/POST/PUT/DELETE)

## RESTなコンポーネントをすぐに作れるresourceとresources

### routesに記述

“`routes.rb
R

元記事を表示

【Rails】SorceryでTwitter認証

## はじめに
Sorceryを使ったTwitterログイン認証の設定です。
途中までは[【Rails】Sorceryでfacebook認証 Sorceryの設定](https://qiita.com/aiandrox/items/ca798da0bca617074795)と同じなので、そちらをご覧ください。

### 動作環境

“`
ruby 2.5.3
Rails 5.2.4.2
sorcery 0.14.0
“`

### 前提
– Twitter Develpersのユーザー登録とアプリの登録
– [【Rails】Sorceryでfacebook認証](https://qiita.com/aiandrox/items/ca798da0bca617074795)のfacebook認証の部分以外

## 設定
### Sorceryの設定
“`rb:config/sorcery.rb
config.twitter.key = Rails.application.credentials.dig(:twitter, :key)
config.twitter.secret

元記事を表示

ActiveRecord のコールバックを特定のコントローラーの処理のときのみ実行する

## はじめに

ActiveRecord のコールバックを、特定のモデルの状態というよりは、特定のコントローラーの処理の場合のみ実行したい場合について考えたので、簡単にやり方をまとめます。

## tl;dr

方針としては、コントローラーにモデルのインスタンス変数でフラグを付けてあげて、そのフラグが立っている場合のみ実行するという形にしました。

## 例

今回は `Post` モデルの `status` を `create` 時にのみ `created` とつけることを考えます。

## やり方

### モデルにattr_accessor と after_save の設定

まず、`Post` モデルにステータス更新用の `update_status` メソッドを定義します。

また、インスタンス変数のフラグを立てるメソッド`create_executed!` メソッドとフラグ判定メソッド `create_executed?` メソッドも作っておきます。

そして、`after_save` コールバックで、`create_executed?` が `true` のときだけ

元記事を表示

Rails + heroku App でpage speed insightをあげる

##レンダリングを妨げるリソースの除外
全部のjavascriptにレンダリングしてるところに`defer: true`をつけた

“`
<%= javascript_pack_tag 'faq', defer: true %>
“`
## オフスクリーン画像の遅延読み込み
遅延読み込みという技術は、Webサイトに表示される画像を一度に読み込まず、必要に応じて必要な分だけ読み込むというものです。不必要な画像の読み込みを後回しにして、画像以外のCSSやJSファイルの読み込みが先に行われます。そうすることで、表示速度を速くすることができます。

“`
yarn add v-lazy-image
“`

“`

import VLazyImage from “v-lazy-image”
export default {
components: {
VLazyImage
}
}
“`

## テキスト圧縮の有効化
https://qiita.com/Oak

元記事を表示

【Ruby on Rails】Ajax通信で特定の要素を変更する

# はじめに
RailsのAjax通信使って特定の要素を編集・更新する方法について記載します。
例で簡単なカテゴリー一覧画面の1つのカテゴリーの名前を更新する処理を使います。

# バージョン
– ruby 2.6.3
– rails 5.2.1

# 画面概要
以下のような画面です。
![スクリーンショット 2020-03-28 22.13.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203478/489c6b4e-a966-b732-2827-0ed39b51b769.png)

この右のほうにある鉛筆マークの編集アイコンボタンを押すと、該当の行のカテゴリー名がフォームに変わります。
![スクリーンショット 2020-03-28 19.32.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203478/16f3c4ee-f645-cb25-f358-d14d88adea94.png)

カテゴリー名を変更

元記事を表示

Docker上のRailsアプリにWebpackerを導入してみる

## はじめに
この記事では、既存のRailsアプリにWebpackerを導入する手順を書いていきます。
WebpackerやWebpackを使用したことがない方向けです。

### 開発環境
Rails 5.2.3
ruby 2.5
mariadb 10.1
docker

## Webpackerとは
Railsでwebpackを使用するためのgemパッケージです。
複数のjs,css,画像などを一つにまとめることにより、
ファイルの取得にかかる時間を短縮できるというメリットがあります。

## 実装
### gemのインストール
まずアプリにgemパッケージをインストールします。

“`:Gemfile
gem ‘webpacker’, ‘~> 4.x’
“`
Gemfileを更新したら、`bundle install`します。

### yarnのインストール
Webpackerは`yarn`というnode.jsのパッケージマネージャを使用するそうなので、
Dockerにyarnをインストールするためのコマンドを追記します。

“`ruby:Dockerfile
RUN

元記事を表示

指定したエリアだけを印刷する処理

# こんな場面で使えます。
 例えば、ユーザーに何らかのアンケートに回答をしてもらうサイトで
**ユーザーが自分の回答結果の部分だけを印刷したい場合**などに使えます。
普通の印刷では余計な箇所も入ってくるので、必要なエリアだけを印刷できるようにします。
※実際の挙動が確認できるwebアプリのURLを一番下に載せてますので、そちらもご確認ください。
![11printImg1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533713/69200c0f-8c51-2c4c-d8fc-3a4af6868b15.jpeg)

# 実装の流れ
 1:印刷ボタンを作成
 2:プリントしたいエリアの取得の指定
 3:2のエリア全体のコピーを作成
 4:3以外を非表示にする処理を作成
 5:印刷ダイアログの呼び出し➡︎印刷する
 6:3で作成した印刷用エリアを削除 ・ 4で非表示にした要素を表示する

# 実装スタート
## 1:印刷ボタンを作成

“`html:print.html

元記事を表示

AWS SNS から送られてくる POST リクエストは text/plain なので body パラメーターをパースするときは注意する

# 概要
AWS SNS から来る POST リクエストの body パラメーターをパースしようとしたときに、上手く行かなくてはまったので、解決策を共有します。

# 解決策
AWS SNS は HTTPS POST リクエストでアプリケーションにメッセージを送信してくれます。
参考記事: [受信者が HTTP/S エンドポイントの場合のシステム間メッセージングに Amazon SNS を使用する](https://docs.aws.amazon.com/ja_jp/sns/latest/dg/sns-http-https-endpoint-as-subscriber.html#SendMessageToHttp.prepare)

その際に、body パラメーターにメッセージの内容が入っているのですが、Rails の params メソッドを使用してもパラメーターの中身を取得できませんでした。

“`ruby
class SnsController < ApplicationController def message params # メッセージがない end e

元記事を表示

【Ruby on Rails】Rails超入門1!マジで凄い!scaffoldで恐竜登録アプリ作成1

###1.scaffoldとは

Webアプリケーションに必要なビュー(画面)、コントローラー(制御部分)、モデル(データベース)をコマンド一つで提供してくれるコマンド。
さらにwebアプリに共通するCRUDを提供してくれる。

###2.scaffoldによるアプリの作成

(1)__rails new 作成したいアプリ名__
でアプリケーションを作成する。

![make_scaffold2_dino1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494408/cd121460-417c-b79f-7f17-33a43fe3c550.jpeg)

(2)下記コマンドをアプリケーションに移動して入力する。

__rails generate scaffold モデル名 カラム名1:データ型1 カラム名2:データ型 2 …__

例)
__rails generate scaffold dinosor2 dname0:string dtype0:string sname1:string stype1:

元記事を表示

応用 Lesson2 検索力についてのまとめ

#応用カリキュラム Lesson2対応 リンク集

エンジニアにとって検索力がとても重要なことを学び、
テキストにあるワードを検索してみました。

##初投稿
まずQiitaの使い方からよく分かりませんので、その辺は徐々に。
とりあえず自身のアウトプットとして書きます。
どなたかの何かのお役に立てたら光栄です。

では、ワードごとにリンクを貼っていきます。
あえて、ワードに対する答えは載せません。
あくまでリンク集です。(自分のためにも…)

##【リンク集 ~Link Page〜】

###1. jQueryのメリット・デメリットは簡単に言うと?

<検索ワード>
 jQuery メリット

<参考サイト>
 AtoOne 様
 https://www.atoone.co.jp/column/10176/

###2. Queryは最近のトレンドの中でどのような立ち位置か?

<検索ワード>
 jQuery トレンド 立ち位置

<参考サイト>
 Hideout der Eremit 様
 https://dereremit.jp/archives/260

###3. dev

元記事を表示

Rails × Docker ログに「Cannot render console from Allowed networks」と出力される対処法

# ログに「Cannot render console from Allowed networks」と出力される対処法

### 環境
ruby 2.5.1
rails 5.2.4
docker 19.03.8

Ruby on Railsの開発環境で、DockerかVagrantを使っていて、”Cannot render console from 172.20.0.1! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255″ 「このIPアドレスではレンダリングできない」と言われた場合

# うぉおおん?

“`
Started GET “/” for 172.20.0.1 at 2020-03-28 09:15:23 +0000
web_1 | Cannot render console from 172.20.0.1! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
“`
[![Image from Gyazo](https://i.gya

元記事を表示

#Rails / Controller 以外で ActiveModelSerializers の動作確認、JSON出力をする ( rails console とか )

モデルのインスタンスを Serializer に与えて to_json するだけで良さげ

# Serializer

“`rb
class UserSerializer < ActiveModel::Serializer attributes :id, :name end ``` # 動作 空のインスタンス ```rb user = User.new #

serialized_user = UserSerializer.new(user)

serialized_user.to_json
# => “{\”id\”:null,\”name\”:null}”
“`

DBからインスタンスを得る例

“`rb
user = User.last

# #

元記事を表示

【ruby,rails】環境変数から読み込んだ秘密鍵の文字列の改行コードがエスケープされていて秘密鍵としてパースできないときの対処法

# 概要
環境変数から読み込んだ秘密鍵の文字列の改行コードがエスケープされてしまうことによって、秘密鍵としてパースできないときの文字列処理を共有します。

# 解決策
たとえば下記のような秘密鍵があったとき、

“`
—–BEGIN RSA PRIVATE KEY—–
MIGrAgEAAiEAvnrd8LBnzAGxCW+i7KtVQSiTsssMtbwcs5styeKsn2kCAwEAAQIh
AKBF8glb5Xqa0cQG0ygg4hIFdipmvEJhiCuhX93krDCBAhEA51bAM0gFPvxyk9Xe
ioIOBQIRANLJEv4Xw7MwT7EEEARL5RUCEBa8bu1bUbCsDPK8nT+NoqUCEQCIzFCU
MY4j7BW8N3vBnhPlAhBgs4tSfe6RbpertixmCygk
—–END RSA PRIVATE KEY—–
“`

環境変数に設定するときは下記のように改行コードを使って、文字列を1行にして設定すると思います。

“`
—–BEGIN RSA PRIVATE KEY—–\nM

元記事を表示

ユーザー管理に必須!Gemの『devise』を使おう!

Railsにおいてユーザーを管理する際に必要となるのが『devise』と呼ばれるGemです。

![68747470733a2f2f7261772e6769746875622e636f6d2f706c617461666f726d617465632f6465766973652f6d61737465722f6465766973652e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595506/e29ffb46-fea8-a7e6-73fc-60285b4de3d3.png)

deciseの設定を忘れてしまわないように備忘録として記述します。

#deviseの機能
このGemを使用することによって、ユーザーを管理する機能を追加する際に簡単に管理を行うことができるようになります。

# deviseの設定

##1.Gemfileへの記述
“`
# 省略
gem ‘devise’ # 最終行に追記
“`

##2.ターミナルにてbundle install

“`
$ bundl

元記事を表示

dockerでよく使うコマンド一覧【Rails】

“`:土台
$ docker-compose run web ~
“`

MySQLを使う場合

“`
$ docker-compose run web rails new . –force –database=mysql
$ docker-compose build
“`

model作成

“`
docker-compose run web bundle exec rails g model (モデル名) (カラム名)
“`
バックグラウンドでコンテナ起動

“`
docker-compose up -d
“`

コンテナ再起動

“`
docker-compose restart
“`

Gemfile変更時(基本的には)

“`
$ docker-compose build
“`

DBへテストデータ投入

“`
$ docker-compose run web bundle exec rake db:seed
“`

DBへテストデータを一から入れ直したい時
(テーブル削除、作成、マイグレーション)

“`
$ docker-compose

元記事を表示

dockerでよく使うコマンド一覧

MySQLを使う場合

“`
$ docker-compose run web rails new . –force –database=mysql
$ docker-compose build
“`

model作成

“`
docker-compose run web bundle exec rails g model (モデル名) (カラム名)
バックグラウンドでコンテナ起動
“`

docker-compose up -d
コンテナ再起動

“`
docker-compose restart
“`

Gemfile変更時(基本的には)

“`
$ docker-compose build
“`

DBへテストデータ投入

“`
$ docker-compose run web bundle exec rake db:seed
“`

DBへテストデータを一から入れ直したい時
(テーブル削除、作成、マイグレーション)

“`
$ docker-compose run web bundle exec rake db:drop
$ docker-compos

元記事を表示

Railsチュートリアル〜6章〜ついにモデル作成へ突入

#userモデルの作成
5章を足早に終わらせて続いて6章に入っていきます。
ここではユーザー登録ページを作成していく。
・ユーザー用のデータモデルの作成
・データを保存する手段の確保について学ぶ。

Railsではデータモデルとして扱うデフォルトのデータ構造のことをモデルと呼ぶ。Railsでは、データを永続化するデフォルトの解決策としてデータベースを使ってデータを長期間保存する。データベースとやり取りをするデフォルトのライブラリはActive Recordという。
Active Recordはデータオブジェクトの作成・保存・検索のためのメソッドを持っている。

#データベースの移行
今回の目的は永続性のあるモデルを構築することである。
Railsでユーザーをモデリングする時は属性を明示的に識別する必要がなく、デフォルトでリレーショナルデータベースを使用する。リレーショナルデータベースはデータ行で構成されるテーブルからなり、各行はデータ属性のカラム(列)を持つ。nameとemailのカラムをもつusersテーブルを作成する。

“`
Userモデルを生成する
$ rails gener

元記事を表示

Railsの既存AppをDockerに切り替える際に役立つ記事

#既存のAppをDockerに切り替える
過去に制作したRailsアプリをDockerで構築したいと思います。

## 参考になる記事
基本的にこの記事を使って、進めていきました。
[Ruby on Rails 「途中まで作ったアプリにDockerを導入したい」に挑戦してみる(MySQL / Sequel Pro)](https://qiita.com/majorboy/items/9fbfc78fc7bbc1f35e77#comment-60a244ed29cedf06555d)

build時のエラーが出たら、下記の資料が役立ちます。
[Docker docker-compose up時、You must use Bundler 2 or greater with this lockfile. という地獄のエラー](https://qiita.com/avicii2314/items/769aacd3b5b949dcbcb8)

1. Gemfile.lockの記述を削除して、空状態にする。(Dockerに切り替える際に阻害してしまう)
2. Dockerfileのbundle

元記事を表示

RailsアプリにDockerとCircleCIを導入した際、DB周りでエラーになったときの対処法

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

CircleCIで`git push`時に自動テスト(RSpec)しているRailsアプリに、Dockerを導入しました。

その際にデータベース周りで躓いたエラーがあります。

同じエラーの報告が少なかったので、エラー解消した対処法を共有します。

# エラー文

`git push`をトリガーにCircleCIがテストを実行するのですが、その前にデータベースを構築します。
そこでエラーが出ていました。

“` .circleci/config.yml
# DBをセットアップ
– run:
name: DBをセットアップ
command: bin/rails db:schema:load –trace
“`

※全文は下記

“` CircleCI
#!/bin/bash -eo pipefail
bin/rails db:schema:load –trace
** Invoke db:schema:load (first_time)
*

元記事を表示

OTHERカテゴリの最新記事