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

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

LINE Messaging API・LINE Botを使ったKPT分析に特化したWEBアプリ(Rails)を作る

# TL;DR
この記事は、LINE ログインとLINE BotによりWebアプリと連携を行うことを目的としています。

このアプリはスクラム開発を行っている方が対象となっています。
主な機能として、スプリントごとにKPTを管理できたり、タスクの管理が行えます。
ログインはLINEアカウントにより可能です。

実際に作成したWebアプリはこちらになります。
ぜひ、使ってみてください!
[KPT分析・タスク管理アプリ DONE](https://tmrekk121-done.herokuapp.com)

# アプリ概要
![linebot-flow.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366133/c6a6a08e-1fdc-400e-98b4-ef5c8da20aa6.jpeg)

LINEBotは用途として現在はタスクを取得・登録することのみ可能です。

# 環境
– Ruby version 2.6.0
– Rails version 6.0.0
– MySQL 8.0.17

# 実

元記事を表示

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

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

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

#第9章

9章では、ユーザーの任意の設定で、ブラウザを落としても、ユーザーがログアウトしない限り、ログインしたままの状態を作っていきます。

##9.1 Remember me 機能

ブラウザを落としても、ログインが有効となる機能を実装します。

トピックブランチを作成していきます。

“`
$ git checkout -b advanced-login
“`

##9.1.1 記憶トークンと暗号化

sessionメソッドは、ブラウザを落としたらユーザーIDが消えてしまいます。

しかし、記憶トークンを作成し、cookiesメソッドを使うことで、永続的にcookiesの作成やrememberdigestによるトークン認証で、この記憶トークンを使います。

sessionメソッドと違いcookiesメ

元記事を表示

rubocopの起動をチョッパヤにする

## 概要

rubocop でコードのチェックをしているが、検査が始まるまでにどえらい時間がかかるのでなんとかしたい

## 原因

ファイルのリストアップに時間がかかっているっぽい。
プロジェクトのファイル数に比例してロード時間が伸びる。

## 解決策

Exclude に除外するディレクトリを登録
gemとかJSのライブラリのディレクトリを除外する

“`ruby
AllCops:
Exclude:
– ‘.direnv/**/*’
– ‘.git/**/*’
– ‘bin/*’
– ‘db/schema.rb’
– ‘config/**/*’
– ‘lib/tasks/**/*’
– ‘log/**/*’
– ‘node_modules/**/*’
– ‘public/**/*’
– ‘tmp/**/*’
– ‘vendor/**/*’
“`

## 結果

before

“`shell
$ rubocop 0.18s user 0.09s system 1% cpu 13.

元記事を表示

#Rails で has_many の association を delete_all してもレコードが削除されないのだが?

# model

“`rb
class User < ApplicationRecord has_many :books end ``` ```rb class Book < ApplicationRecord belongs_to :user end ``` # 挙動のイメージ ``` Book.size # 3 ``` ``` user.books.size # 3 ``` ``` user.books.delete_all user.books # [] user.books.size # 0 ``` ``` Book.size # 3 ``` # 理由 レコードは削除されず association の id が nil になってるっぽい ```rb Book.first => [# [#

元記事を表示

railsでtext_areaで入力したまま表示する(改行、段落)

form_forやform_withなどのtext_areaのフォームに文字を入力した際、

– 改行
– 段落

などつけて入力したのに、いざ表示させると改行も段落もない・・ということみなさん多いと思います(初心者だけでしょうか?)
railsヘルパーの「simple_format」を使っても、行の改行は反映されるけど、

– 連続した改行(空白のままの改行)
– 段落(スペースキーで1文字分の空白を作る)

は反映されません(と思います)
少なくとも私は反映されませんでした

rails初心者の私も先ほどまで、どうすればいいのかわからずググっていたら解決法がありましたので、ご紹介しようと思いますが、まだよく理解はできてないので、詳しく知りたい方は下記のリンクをご覧ください。

以下参考にしたサイト
https://www.ryotaku.com/entry/2019/06/25/%E3%80%8Csimple_format%E3%80%8D%E3%82%84%E3%80%8Csafe_join%E3%80%8D%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6

元記事を表示

rails 発展その2 ログイン機能

## ログイン機能の作成
“`ruby:gemfile
gem ‘devise’
#上記を記述
“`

“`bash:ターミナル
$ pwd
# 現在のカレントディレクトリの確認

$ bundle install

$ rails g devise:install
# deviseの設定ファイルを作成

  $ rails g devise user
# deviseコマンドでモデルを作成
“`

  rails g devise コマンド
   deviseで、ログイン機能をつける概念のモデルを作成する際に利用するコマンドです。
   モデルに加えて、ログイン機能のために必要なカラムが追加されるマイグレーションファイル
   などが生成されます。

“`bash:ターミナル
  $ rake db:migrate
  # 作成されたマイグレーションファイルを実行
 
  $ rails g devise:views
   # モデルに対応するいくつかのビューが作成されます。
 registrati

元記事を表示

RailsをGCEにcapistranoを使ってdeployする (CentOS、Nginx、Puma)

– RailsをGCEにdeployして公開するまでの手順を記事にしたいと思い書きました。
– 今回の記事では単一のGCEインスタンスにdeployするまでです。
– GCP(GCE、VPC)
– ruby 2.6.5
– rails 6.0.0 (今回railsアプリはapiモードで作成し、DB接続しない前提です。)
– CentOS7
– Nginx
– puma
– capistrano

#### 必要であればVPCでカスタムネットワークと、ssh接続やhttp接続するなら、そのportを開けるファイアウォールを作ります。
– GCPは、カスタムネットワークを設定しない場合、デフォルトのネットワークが使われる。個人開発であればデフォルトネットワークでも構わないと思います。
– GCE立ち上げ時にhttp通信の許可にチェックするでもいいですが、自宅やオフィスなどアクセスするIPが決まっているなら、そのIPからのみアクセスできるファイアウォールを作成するなどして開発すると良いと思います。

## GCEにCentOS 7のインスタンスを作成します。
– USのリージョンで、1系の

元記事を表示

Rails Tutorial 9章の最後のテストでrememberが見つからない

# はじめに
個人的に[Rails Tutorial](https://railstutorial.jp)の第9章で書かれている通りにしてもうまく動かなかったので、つまづいた点を備忘録の意味も兼ねて書いておく。初めての記事なので、ミス等ある場合は教えていただけると大変ありがたいです。

開発環境
OS    :  Ubuntu 18.04
Ruby :  2.6.5
Rails  :  6.0.0

## 永続的セッションのテストでrememberが見つからない
[9.3.2](https://railstutorial.jp/chapters/advanced_login?version=5.1#sec-testing_the_remember_branch)の永続的セッションのテストを行うと、次のようなエラーが出た。

“`ruby
DRb::DRbRemoteError: undefined method `remember’ for #

元記事を表示

【知らずに損した】ActiveSupportの期間指定メソッドall_day, all_week, all_month, all_year

## はじめに
**期間を絞って**データをいじくりたいあなたに。

Railsアプリケーション作成時、**「もっと早く知っていれば!」**と後悔したメソッドたちの紹介です。

## この記事が役に立つ方
– ActiveSupportの存在をあまり認識せずに
– Ruby on Railsアプリケーションを作成している
– Rails初心者

## この記事のメリット
– 「きっと誰かがこの操作のメソッド作ってるよね!先に用意されていないか探そう。」という思考になることが出来る。
– 期間指定で工数の削減が出来るようになる。

## 環境
– OS: macOS Mojave version 10.14.6
* シェル: zsh
* Ruby 2.6.3
* Rails 6.0.1

## 背景
**投稿の背景**は以下の通りです。

自作の**学習時間記録アプリ**にて日、週、月それぞれで範囲指定をして計算したいシーンに遭遇。

DBに専用のカラムを設けたり、変数を沢山作ったりして実装。ムダが多い気がしてリファクタリング方法を探す。

実装後、**ActiveSupport*

元記事を表示

rails 発展その1

## ルートパス
今までは、local:host3000/コントローラ名
又はlocal:host3000/コントローラ名/アクション名でページに遷移していたが
local:host3000だけで初期ページに移動するようにできるようにする。

“`ruby:routes.rb
Rails.application.routes.draw do
root ‘コントローラ名#アクション名’
end

# 例 root ‘home#index’
“`

## データの並び替え
コントローラーで取得したデータの並び替え
“`ruby:コントローラー
def アクション
@テーブル名 = モデルクラス名.all.order(“id DESC”)
end

# 例 @items = Item.all.order(“id DESC”)
“`

## ページネーションの実装
データが一定以上になると複数のページ化する処理です。

“`ruby:gemfile
gem ‘kaminari’
 #これをgemgileに書き込み
“`
“`ターミナル

元記事を表示

rails-erdで指定したテーブルのみでER図を描く方法

# 概要
* railsアプリでER図を自動生成する際に利用するrails-erd
* 一部のテーブルのみだけでER図を作りたい場合の解決方法を記載する

# 背景
* サービスが拡大してテーブル構成がかなり複雑になってしまい、ER図をそのまま出力すると何が何やらの状態になってしまった
* 一部のテーブルの関係性のみを可視化してわかりやすい形で出力したかったため、調査

# 方法
## .erdconfigを使う

* [Rails ERD – Configuration](https://github.com/voormedia/rails-erd#configuration)
* 抜粋
> Rails ERD has the ability to be configured via the command line or through the use of a YAML file with configuration options set. It will look for this file first at ~/.erdconfig and then ./.erd

元記事を表示

ローカル変数とインスタンス変数の違い

###ローカル変数とインスタンス変数の違い
`ローカル変数`
その場限りの一時的な変数。
メソッド内で定義したローカル変数は**そのメソッドの中でしか使えない。**

`インスタンス変数`
オブジェクトの保持する変数。
オブジェクトの**どのメソッド内でも使用できる**
##ローカル変数numberを使ってメソッドを呼び出す

“`ruby:myclass.rb
class Myclass
def method_1
number = 100
end

def method_2
number
end
end
“`

“`irb
>object = Myclass.new
>object.method_1
=> 100

>object.method_2
Traceback(most recente call last):
NameError (undifined…)
“`
method_2ではエラーが返ってきています。
つまりmethod_2ではmethod_1で使ったnumberは使えない状態だということです。

##インスタンス変数@numberを使う

元記事を表示

【Rails】複数の条件の検索機能を作る。日付範囲検索を行う

# やりたいこと
1つの検索フォームで、複数の値を同時に検索したい。
今回は、customersテーブルのname_kana、phoneとreservationsテーブルのcheck_inの日付範囲検索を1つの検索フォームで実装する
ba95a6737f4ce1951d75b96a7497e8fe.png
# 前提条件
下記のように、一人のcustomerが多くのreservationsを持つ、1対多の関係。

“`models/customer.rb
has_many :reservations
“`
“`models/reservation.rb
belongs_to :customer
“`

# 実装方法
1.reservationモデルに、scopeを使って複数の検索条件を定義する。
2.res

元記事を表示

if…else…endの条件分岐文がどうして汚いんですか(怒)→すみませんでした!!!

#その日の流れ

test = if 日本人なら?
“和食”
else
“洋食”
end

こんな感じのコード書いて、この直下に式展開でtestを呼び出すようなコード書いてたら
先輩に「きたねー」と言われてしまった。。。

#Lv.5になって「でんこうせっか」覚えた気分だ

最初に「三項演算子」というものがあってだな…という説明を受けた時に
ちょっと自分の悪い癖が出てしまって、こんなことを思ってしまった。

![名称未設定ファイル (53).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453260/a7bf2a45-34cb-91a3-2063-0905faeb9f16.jpeg)

だが、俺は3ヶ月だしそもそも書き方これしか知らない奴が見やすいっていうのは
オレオレ表現のオンパレード何だろうな…と思いながら、くそ丁寧

元記事を表示

#rspec の subject の中とか binding.pry とかすると Rspecの内部処理が表示されて動かないのだが? ( #Rails )

# 動かない

なにこれ

“`
subject { binding.pry; some }
“`

“`
From: /usr/local/bundle/gems/rspec-core-3.8.2/lib/rspec/core/memoized_helpers.rb @ line 317 RSpec::ExampleGroups::SomeClass

=> 317: define_method(name) { __memoized.fetch_or_store(name) { super(&nil) } }

[1] pry(#)>
“`

# 動く

ブレースじゃなくて do end で複数行で書くという裏技を教わった
“`
subject do
binding.pry
some
end
“`

# Original by Github issue

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

元記事を表示

RubyonRails 速習実践ガイド セッターゲッターまとめ

#RubyonRails 速習実践ガイド 自分まとめ

####インスタンス変数
オブジェクトが抱えている変数のことをインスタンス変数と呼ぶ。
インスタンス変数に代入したデータは、そのオブジェクトが存在する限り存在し続ける。
頭に@をつける。

####セッターとゲッター

“`user.rb
class User
def name=(name) #セッターを定義
@name = name
end

def name #ゲッターを定義
@name
end
end
“`

上記の一つ目のdef内で「name=」というメソッドを追加している
これはインスタンス変数を代入するためのメソッドで**セッター**と呼ぶ。

“`
>user = User.new
>user.name = “吉田沙織”
=>”吉田沙織”
“`
これによりインスタンス変数に名前を代入することが可能になった。

また二つ目のdef内ではインスタンス変数の内容を参照するためのメソッドを作成している。
これを**ゲッター**と呼ぶ

“`
>user.name
=> “吉田沙織”
“`
これ

元記事を表示

Rails tutorial 第1章 デプロイエラー

Railsチュートリアルで初っ端から詰まったのでQiitaの投稿テストも兼ねて解決法をメモ。
最初のデプロイでエラーになるパターンはどうやら多いようで、原因も多岐に渡るよう。
その内のいくつかを試したが上手くいかなかったので、もう一度エラーメッセージを見直した。

“`
remote:
remote: !
remote: ! Could not detect rake tasks
remote: ! ensure you can run `$ bundle exec rake -P` against your app
remote: ! and using the production group of your Gemfile.
remote: ! rake aborted!
remote: ! LoadError: cannot load such file — bootsnap/setup
remote: ! /tmp/build_91342a9bef3f968c6ae2092e716225bc/config/b

元記事を表示

Rails groupでカラム別にcountする

countする時groupでカラム別にcountする

“`ruby
#Userモデル
User(id: integer, email: string, status: integer)

# User.statuses
{“init”=>0, “using”=>1}

User.all.count
(233.9ms) SELECT COUNT(*) FROM `users`
=> 10

User.all.group(:status).count
(135.6ms) SELECT COUNT(*) AS count_all, `users`.`status` AS users_status FROM `users` GROUP BY `users`.`status`
=> {“init”=>4 “using”=>6}

“`

元記事を表示

Railsのautoloadについて(初心者向け)

# Railsのautoloadについて(初心者向け)
通常のRubyでは自分で作成したRubyプログラム(クラスの定義など)を読み込む場合もrequireを使います。

例)

“` ruby
class Dog
class << self def bark p 'Wan' end end def run p 'buuun' end end ``` ``` ruby # requireが必要。理由はDogClassとmain文が別になっている為。 require './seperate_class' # 追加 Dog.bark dog.run dog = Dog.new() ``` ## Railsの場合は しかしRailsの場合はrequireを書く必要がない時があります。 例) Railsのコントローラクラス ``` ruby class HogeController < ApplicationController def index @hoges = Hoge.all end end ```

元記事を表示

Rails controllerで早期returnするTips

# TL;DR

“`users_controller.rb
def show
@user.do_something(params[:foo])

my_redirect && return # 注目

@user.do_something_other
end

private

def my_redirect
if @user.some_flag?
redirect_to some_path(@user.some_attr)
end
end
“`

# 解説
以下の要望があると考えましょう、`@user.do_something(params[:foo])`で、paramの一部を処理してから、`@user.some_flag?`を判断して、`some_path(@user.some_attr)`に動的リダイレクトしたいです。
また、リダイレクトが実行された場合、`@user.do_something_other`を実行しないことです。
特にSEO系の要件でそういうリダイレクト処理が多いと思いますね。

## Guard Clauseとは
条件分岐や関

元記事を表示

OTHERカテゴリの最新記事