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

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

RSpecの導入

# Gemのインストール

“`
group :development, :test do
# Call ‘byebug’ anywhere in the code to stop execution and get a debugger console
gem ‘byebug’, platforms: [:mri, :mingw, :x64_mingw]

# —– 以下追加 —–
gem ‘factory_bot_rails’
gem ‘pry-byebug’
gem ‘rspec-rails’, ‘~> 4.0.0.beta’
end
“`

以下のコマンドでRailsアプリに、rspecを導入できる。

“`
bundle exec rails generate rspec:install
“`

導入しようとしたらそもそもアプリ作り立てなので「bundle install」をしてなかった。笑

“`
asatokensei@MacBook-Air tomalog % bundle exec rails generate rsp

元記事を表示

RAILS_ENVの数は増やさず、環境ごとの差異をymlでいい感じに管理する方法

本番環境とローカルの開発環境の他に、ステージング環境やQA環境などと言った環境が複数あるのが一般的です。
こういった環境ごとの異なる設定値(例えばデータベースの設定や、連携しているサービスのURLやIDなど)をどうやって管理するかというのはRailsアプリを運用する上で悩むポイントかと思います。
本記事では、RAILS_ENVを増やすことなく、Railsが用意するRails::Application.config_forを用いて、環境ごとの設定値をymlでいい感じに管理する方法を紹介します。


複数環境があるという前提で、その環境感の差異を無くして一致させようという話については、このスライドに綺麗にまとまっているので参考にしてください。

## Rails::Application.config_forのおさらい

“`rb
module MyApp
class Application < Rails::Application confi

元記事を表示

rails serverを終了させる方法

コマンドの紹介になりますが、以下の通りです

“`ruby
ps aux | grep puma
kill -9 “pumaのプロセスid”
“`
rails serverがpumaを用いて起動しているので、このような形になります。

元記事を表示

gem追加時にSprockets::FileNotFoundエラー発生

## エラー状況
RailsにてGemを追加した後にブラウザを見ると**Sprockets::FileNotFound**というエラーが発生します。

今回はgem ‘jquery-rails’というGemを追加しました。

“`
gem ‘factory_bot_rails’
gem ‘rails-controller-testing’
gem ‘capybara’, ‘>= 2.15’
gem ‘jquery-rails’ #これを追加
“`

見たところGemファイルの記述に間違いはない模様。
bundle install後のターミナルも異常なし。

Googleで**Sprockets::FileNotFound**で検索。

すると似たような環境のエラーを発見!(下記URL)
https://ja.stackoverflow.com/questions/18042/gem%e8%bf%bd%e5%8a%a0%e6%99%82%e3%81%absprocketsfilenotfound

## 解決方法
**結論**:Gemfileにgemを追加する前にRailsを立ち上げ

元記事を表示

Rubyで作るLINEメッセージング機能の作り方

## はじめに

Rubyで書かれたシステムと一般ユーザのLINE間でメッセージのやり取りをする機能を開発する機会があったので、その時に得た知見を共有します。

また実際に動くアプリケーションのデモをRails使って作ったので、詳しい実装の詳細は [こちら](https://github.com/tkm-kj/line-api-sample/tree/v1.0) を見て頂くと、スムーズに記事の内容が入ってくると思います。

## 作るもの

システム管理者(以下「管理者」)と一般ユーザ(以下「ユーザ」)でLINEを媒介としたテキストメッセージのやり取り機能を作ります。
実際にやり取りをするためにユーザのLINEの情報をシステムが知っている必要があるので、ブラウザ上でのLINEログインも実装します。

ユーザのLINEの情報を紐付けた後は、ユーザが管理者に紐づくLINE公式アカウントにメッセージを送ると、そのメッセージがWebhookでシステムに飛んでいき、そこからデータベースに保存されます。ざっくり以下の図のようなイメージです。
![Untitled Diagram (1).png](

元記事を表示

jQueryの考え方

# はじめに

この記事では、jQueryを初めて扱う人向けに作成したものです。
もし、ご興味ある方は是非読んでみてください。

# jsファイルの注意点

jQueryは、js(javascript)ファイルに記載するものなのですが、ファイルを読み込む際は注意が必要です。例として、htmlファイルにjsファイル(sample.js)を読み込む場合は

“`html





jsファイルに読み込ませる文章

元記事を表示

ウェブアプリケーション開発がしたい!

皆さん初めまして。tkseと申します。
2020年5月末からウェブアプリケーションを開発することを目標にRuby,Railsを勉強中です。

ここにはメモ書きのような形で日々の勉強の中で気づいたことや疑問を残していこうと思います。
訳のわからないことを言い出すかもしれません。その時はご指摘いただけると嬉しいです。

元記事を表示

RailsのN+1問題対策includes、preload、eager_loadについて

先日は久しぶりに面談受けました。相手からActiveRecordのN+1問題の対策を聞かれました。
緊張してincludesのみ答えました、その後相手からpreload、eager_loadとかご存知ですかと聞かれました。
緊急して慌てて「忘れました」と答えました。ここでincludes,preload, eager_loadについて改めて調べてまとめてみることにしました。
# N+1問題
 ActiveRecordのみでけじゃなくて、他のORMも使うなら共同問題です。
# preload、eager_loadとincludes
 簡単に言うと、preloadは指定したアソシエーションを別クエリで取得してキャッシュし、eager_loadは指定したアソシエーションをleft joinで取得しキャッシュします。includesは使い方により変わります。

# preload

“`
Order.preload(:cards).where(sex: “male”)
発行されるクエリ
SELECT `orders`.* FROM `orders` WHERE `orders`.`sex`

元記事を表示

【rails】通知機能

# 開発環境
* ruby 2.6.3  
* rails 6.0.2

# あらすじ
* 【オプション課題1: 終了間近や期限の過ぎたタスクがあった場合、アラートを出したいという課題】を通して。
* 終了期限が切れたり、期限間際で通知するような仕組みを導入します。

# 通知モデルを作成
“`ruby:ターミナル
rails g model notification user:references task:references action:integer checked:boolean
“`

“`ruby:db/migrate
class CreateNotifications < ActiveRecord::Migration[6.0] def change create_table :notifications do |t| t.references :task, null: false, foreign_key: true t.references :user, null: false, foreign_key: true

元記事を表示

【Rails】refileとrefile-s3を用いて、画像をAWS S3へアップロードする方法

# 目標

![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579893/a8fb4365-df4c-9164-63e7-75b12f12dfd3.gif)

# 開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina

# 前提

下記記事の`AWSの設定`と`実装`の「キーを環境変数化」までを行う。

[Carrierwaveとfog-awsを用いて、画像をAWS S3へアップロードする方法](https://qiita.com/matsubishi5/items/96721426cff2b1d67cdd)

# 実装

###`refile.rb`を作成・編集

“`terminal:ターミナル
$ touch config/initializers/refile.rb
“`

“`ruby:refile.rb
require ‘r

元記事を表示

100日後に一人前になるエンジニア28日目

#100日後に一人前になるエンジニア28日目

この記事は[アカウントBAN を実装する](https://qiita.com/akilax/items/8b449b0003aba476b9e8)の続きです。
よかったらこちらからどうぞ。

#セッションタイムアウトを実装する

ユーザーが一定時間アクセスをしなかったら
自動的にログイン状態を解除する仕組みを今回は実装してみます。
まずはsession_controllerからです。
今回の肝となるのは、
session[:last_access_time] = Time.currentの部分です。
ログイン時にsessionに現在時刻を保存しておきます。
あとは普通のログイン処理です。

“`sessions_controller.rb
class User::SessionsController < User::Base #省略... if User::Authenticator.new(user_member).authenticate(@form.password) if user_member.

元記事を表示

LINE Messaging APIとRailsによるLINEBotを作ってみた

# 概要
この記事では、FlexMessageを使ったLINE Botを作成する方法について自分が作ったLINE Botを参考に解説します。

[LINE Messaging API](https://developers.line.biz/en/services/messaging-api/)

# 作ったもの
月日の経過と期限を教えてくれるBotを作りました。
例えば、生まれてから何日経ったのか、誕生日や試験まであと何日かなどを教えてくれるBotです

![1723 1_iphonexspacegrey_portrait.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366133/97f0921b-676b-da65-805d-040b236e7a5d.png)

# この記事で説明すること
– RailsとLINE Messaging APIによるボット作成
– LINE Messaging APIの使い方(Ruby使用)
– ユーザーの送信内容によって返信内容を切り替える
– Fl

元記事を表示

Rails で使える Ruby 配列メソッド (each以外)

# この記事で扱うRuby配列メソッド
1.selectメソッド
2.rejectメソッド
3.keep_ifメソッド
4.delete_ifメソッド
5.findメソッド
6.mapメソッド

Rubyバージョン: 2.5.1 で動作確認

# 書いたきっかけ
今まで配列メソッドといえば`each メソッド`くらいしか使ったことありませんでした。(筆者はプログラミングを本格的に学習し始めて2ヶ月程度の初心者です。)
Rails で個人アプリを開発中、「DBテーブルから取得した配列データをうまい具合に加工して必要な要素だけ表示したいけど、うまくできない」っていうことが多々。
解決のために色々と調べる中で「こんなに便利なメソッドがあったのか!」と非常に勉強になったので、 知識の定着兼、備忘録として書こうと思います。

どなたかの参考になれば幸いです。

※`eachメソッド`は使いこなせている、というくらいのレベル感の方を対象として書いています。

# 参考にしたもの
伊藤淳一さんの [「プロを目指す人のためのRuby入門」](https://gihyo.jp/book/2017/9

元記事を表示

RailsのenumをSQLから集計する

## はじめに
セキュリティ上の観点からproductionでrails consoleを使えないことがあります。
このとき登録されているデータの調査を行う場合、redashなどをBI ToolからSQLで調査することがあると思います。
その際のenumを見やすく表示する方法をまとめます。

## 集計方法(やりかた)
次のような、roleがenumで定義されています。

“`ruby
enum role: { user: 1, admin: 9 }
“`

こんな感じのデータを調査します。

| name | role |
|——–|——|
| test_1 | 1 |
| test_2 | 1 |
| admin_1 | 9 |
| admin_2 | 9 |

調査用のSQLであるため、速度を気にせずサブクエリを使います。

“`sql

SELECT td.name, td.role, enum_code.name
FROM test_data AS td
JOIN
(
SELECT ‘user’ AS name,

元記事を表示

heroku に Rails アプリをデプロイする際、特定の rake task を実行しないようにする

# 概要
Heroku buildpack は Rails アプリをデプロイする際のいろんなアレを自動的に実行・処理してくれるため、その流れに沿って開発すればシンプルなプロセスでデプロイを実施することができる。

が、アプリによってはこの Heroku buildpack 内で行われている特定の rake task を実行させたくないといったこともあるかと思う。

もともとある rake task に追加の処理を実行する方法については `Rake::Task#enhance` で参考になる記事がいくつかあるので、そちらを参考にされたい。

# 特定の rake task を実行しない
buildpack 自体は特定の rake task をただそのまま実行するだけであり、その順番などを変更することはできないが、以下のようなファイルを作ることで、buildpack 内で実行される rake task をオーバーライドさせることができる。

例えば、以下の例では `rake assets:clean` の実行を省略している。

“`ruby:lib/tasks/assets.rake
R

元記事を表示

【写真複数登録】rails 画像を複数枚同時に登録する 原始的 力技

##【ゴール】
データ保存時1回で複数枚の画像を一緒に登録する

##【メリット】
■ アソシエーション理解度UP
■ アプリケーションの機能向上
■ UXの向上

##【開発環境】
■ Mac OS catalina
■ Ruby on Rails (5.2.4.2)
■ Virtual Box:6.1
■ Vagrant: 2.2.7

##【実装】

####アプリケーション作成

“`mac.terminal
$ rails new photo
“`

####refile 設定

“`app.gemfile
gem “refile”, require: “refile/rails”, github: ‘manfe/refile’
gem “refile-mini_magick”
“`

“`mac.terminal
$ bundle install
“`

####モデル作成
※アソシエーション  Book : Image = 1 : 多

“`mac.terminal
$ rails g scaffold Book name:string text:t

元記事を表示

【heroku】MySQL本番環境のデータベースをリセットさせる方法

#herokuのデータベースリセット

“`ターミナル.
heroku run rails db:migrate:reset
“`

上記コマンドで、heroku上のデータベースをリセットできます。
しかし、Rails5から本番環境データベース保護機能が追加され,上記コマンドのみだと下記の内容で怒られる。

“`エラー.
rails aborted!
ActiveRecord::ProtectedEnvironmentError: You are attempting to run a destructive action against your ‘production’ database.
If you are sure you want to continue, run the same command with the environment variable:
DISABLE_DATABASE_ENVIRONMENT_CHECK=1
“`

環境変数を指定して実行してください〜と

#解決方法
解決方法として、
`RAILS_ENV=production DISABL

元記事を表示

Active Recordとは めちゃくちゃ簡単にまとめ Rails初心者

Ruby on Railsを勉強しているが、意味わからない文言がたくさん出てくるので超わかりやすくまとめてます。

《Active Recordとは》
RailsではDBと連携してアプリを作っていく。その時にSQL(データベースとやり取りする言葉)を使う必要があるが、それをわざわざSQLを入力することなく、簡単なメソッドでDBにあるデータを扱うことができるもの。Railsの機能。

要は、Rilsがもっている簡単にDBのデータを扱える機能。

データベースからデータを検索するActrive Recordのメソッド。
《よく利用するもの》

all 
find
find_by
first
where
pluck
order
distinct
select
group
joins
having

all,find,find_byあたりはめちゃくちゃ使った。

元記事を表示

TDDでテストが書けないことは、論文が書けないことと似ている : Railsチュートリアル備忘録 – 10章

# Abstract

## 目標:

`edit`、`update`、`index`、`destroy`アクションを実装し、UserモデルのRESTアクションを完成させる

## この章の気付き

### TDDはユーザーの意図(〜したい)と相性が良い

– 〜したいという意図をもとに考えるとテストがスムーズに書ける
– **演繹法的思考プロセス**
– 〜したいという引き出しの多さ、セオリー的な知識・経験の蓄積も重要かと
– 経験的に、限られたリソースで必要十分なアウトプットをするためにはこういった思考プロセスが重要

### 可読性という概念

– `unless`表記はときに可読性の向上に役立つ
– (実行内容) unless helper_method?(論理値を返すヘルパーメソッド)の表記が慣例
– **テストコードにおいては特に無理にDRYにせず、他者からのレビューを意識して書くべき**
– **可読性の高さ=シンプルなで的確なロジックであり、テストの目的とよく合致するかもしれない**

### セキュリティ対策

– Strong Parametersの設定は重要

元記事を表示

【学習メモ】Strong Parameters と accepts_nested_attributes_for

#目次
1.背景
2.Strong Parametersについておさらい
3.モデルに、accepts_nested_attributes_forを使っている場合
4.参考

##1.背景

Railsでオリジナルアプリを開発しているが、「Unpermitted parameter: :_destroy」という表示が出てしまい、それをRailsガイドを確認しながら解決させたので、その学びをアウトプットするため、記載する。

##2.Strong Parametersについておさらい

Railsガイドの説明によると、Strong Parametersとは、

>strong parametersを用いることで、Action Controllerのパラメータが許可されるまでActive Modelの「マスアサインメント」に利用されることを禁止できます。つまり、多くの属性を一度に更新したい場合は、どの属性のマスアップデートを許可するかを開発者が明示的に指定しなければなりません。大雑把にすべての属性の更新を一括で許可してしまうと、外部に公開する必要のない属性まで誤って公開してしまう可能性が

元記事を表示

OTHERカテゴリの最新記事