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

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

Ruby on RailsでAbstractController::Helpers::MissingHelperError:Missing helper file が発生したときの対処法

# 環境
– macOS Version 10.13.4
– Rails 5.2.4
– ruby 2.4

# 状況
「Railsチュートリアル13.2.1 マイクロポストの描画」で
`$ rails generate controller Microposts`
によりMicropostコントローラを作成した後、
`bin/rspec`コマンドを叩くとエラーが発生しました。

# エラーメッセージ
“`
$ bin/rspec
Running via Spring preloader in process 83327

An error occurred while loading ./spec/controllers/account_activations_controller_spec.rb.
Failure/Error: require ‘rspec/rails’

AbstractController::Helpers::MissingHelperError:
Missing helper file helpers/microposts_helper.rb
# ./s

元記事を表示

RailsでChartkickを使ったグラフの実装(簡単だけど、かゆい所に手が届かない)

Railsで折れ線グラフを実装したいと思い、Chartkickを使用しました。
他の方の記事も参考にさせていただきましたが、うまくできないところもあったので参考までに載せておきます。
[Chartkick 公式](https://chartkick.com/#chart-js)

## 環境
Rails 5.2.3

## 構築手順

### 1. gemのインストール
“`ruby:Gemfile
gem “chartkick”
“`

ターミナル

“`
$ bundle install
“`

### 2. JavaScriptのライブラリを読み込む
app/assets/javascripts/application.js に下記を追記する

“`application.js
//= require chartkick
//= require Chart.bundle
“`

この時点でアプリケーションが立ち上がっている状態だと`Sprockets::FileNotFound` のエラーが出るかもなので(私は出ました)、一度サーバーを落として、`rails s`をや

元記事を表示

Rails 開発/実行用の Docke-compose と Dockefile (2019 Dec 最新)

# はじめに
rails 開発用の Dockerfile, Docker-compose が毎回互換性問題で動かなくなるので現時点で動作するモノを覚え書きしておく。

細かい解説は
https://qiita.com/saitoeku3/items/b1aa2ae143624e551aea
https://qiita.com/azul915/items/5b7063cbc80192343fc0
あたりを参照

このページではこれら読んだ人が利用可能であろう、 Dockerfile と Docker-composeを提供する

# デフォルトでとりあえず動くモノ

## dockerfile
“`
FROM ruby:2.6

ENV LANG C.UTF-8

RUN apt-get update -qq && \
apt-get install -y build-essential \
libpq-dev
# yarnパッケージ管理ツールをインストール
RUN apt-get update && apt-get install

元記事を表示

RailsにVue.jsを導入してHello World from Webpackerまで

# 既存のRailsアプリにVueを導入してみた。
趣味作っているRailsアプリに、Vue.jsを導入してみましたので、その手順を記録しておきます。

環境
– rails: 5.2.3
– ruby: 2.6.3
– node: v11.14.0
– webpacker: 4.2.0

## webpackerの導入

“`gem ‘webpacker’“`
“`$ bundle install“`
“`$ bundle exec rails webpacker:install“`

## Vue.jsの導入
“`$ bundle exec rails webpacker:install:vue“`

## Hello world from Webpacker

下のようなファイルが作成されており、その7,8行目ぐらい

“`javascript/packs/application.js
// To reference this file, add <%= javascript_pack_tag 'application' %> to the appropriat

元記事を表示

rails new ~すべてのはじまり~

初心に戻ろうシリーズ。
すべての生みの親。
ゼウス・アマテラス・rails new

“`:ターミナル
$ rails new manbow
“`

このコマンドだけでアプリ開発の土台となるファイルを自動で一括生成してくれます。

#データベース指定
デフォルトでは`sqlite`

“`:ターミナル
$ rails new manbow -d mysql
“`

#バージョン指定
デフォルトでは`最新バージョン`

“`:ターミナル
$ rails _5.2.1_ new manbow
“`

#rails new ~その後~

・基本の流れは以下です。

1.rails newコマンドで新規railsアプリを作成
2.作成されるGemfileを編集
3.bundle installコマンドを実行
4.rails db:createコマンドでデータベースを作成
5.routes.rbファイルにルーティングを定義
6.その他必要なファイルの作成 …

思い立ったらrails new
天気が良いからrails new
彼女に振られたらrails new

減るも

元記事を表示

【Rails】bundle installでbundlerが無いエラーが出る

CircleCIおよび、Dockerイメージ作成時、`bundle install`をすると、以下のエラーが出てしまいました。

“`
/usr/local/lib/ruby/2.6.0/rubygems.rb:283:in `find_spec_for_exe’: Could not find ‘bundler’ (2.0.2) required by your /home/circleci/repo/Gemfile.lock. (Gem::GemNotFoundException)
“`

ローカル環境では、`gem install bundler`をしていたので、circleCIのconfig.ymlとDockerfileそれぞれに、`gem install bundler`を書いてあげれば解決しました。

“`config.yml(circleCI)
– run:
name: bundler install
command: |
gem install bundler
“`

“`Dockerfile.

元記事を表示

2019卒エンジニアが新卒研修を振り返る

[くふうカンパニーAdvent Calendar 2019](https://qiita.com/advent-calendar/2019/kufu)の8日目!

こんにちは、くふうカンパニーの[株式会社みんなのウェディング](https://www.mwed.co.jp/)でエンジニアをしている@Hanachanmです。
新卒です!

5月からエンジニア研修が始まり、早くも7ヶ月が経ちました。
「えっ、7ヶ月も研修って長くない?何をしているの?」と思う方もいるかも知れませんね。
2019年度新卒エンジニア研修の様子は、くふうカンパニーAdvent Calendar 2019の7日目の記事、[2019年新卒エンジニア研修もそろそろ終盤です。そして2020年へ](https://blog.mwed.info/posts/bootcamp-2019.html)をご覧ください。

簡単に研修について振り返っていきたいと思います。

## 研修の構成
`自ら課題を発見して学べる`、`Railsを利用してウェブアプリケーションを正しく作れる`ようになるため、以下のような構成で研修が行われています

元記事を表示

【Rails】omniauth_callbacks_controllerについて

#はじめに
facebookのログイン機能の実装をしていて、難しいなと思った場所の操作をできるだけわかりやすく書こうと思います。一通りの流れが書いてある記事はたくさんありますが、この一つの操作だけに絞ることは本来はMVCモデルとしてはあまりわかりやすいものではないです、しかし詳しく書くためにあえてomniauth_callbacks_controllerのことだけに留めます。
#omniauth_callbacks_controllerとは
omniauth_callbacks_controllerは主にdeviseの:omniauthableを使う時に使うコントローラーです。
facebookなどが提供しているリソースサーバーからの応答をコールバック として受け取り、どういう処理をするかを書くファイルです。

“`
rails g devise:controllers Model
“`

上記のコマンドを実行すると下記のファイルが生成されます。

“`terminal
app/controllers/users/confirmations_controller.rb
app/c

元記事を表示

なんかターミナルでbut the gem is not loaded.Add` gem’ sqlite3’` to your Gemfileって言われた

#症状
dbでも作ろうかと思い、rails g modelができなかった。

#原因
バージョンを指定せずにbundle installを行ったため最新のバージョンのsqlite3がインストールされていたため。v1.4.0はActiveRecordに未対応らしいです。

#処置
gemファイルを編集してsqlite3のバージョンを変更する。

“`ruby:Gemfile
gem ‘sqlite3’
“`

“`ruby:Gemfile
gem ‘sqlite3’, ‘~> 1.3.6’
“`

#まとめ
そもそもmysqlしか使ったことが無かったためsqlite3とはなんぞや?から始まりました。db指定とバージョン指定忘れがち。

元記事を表示

Rails Tutorial Memo #6

自分用の備忘録です.

# 第11章 アカウントの有効化

現時点では,新規登録した時点で全てのページにアクセスできる.アカウントを有効化するステップを追加し,本当にそのメールアドレスの持ち主なのかどうかを確認する.

大まかな流れ
1. 有効化トークンやダイジェストを関連付ける
2. 有効化トークンを含めたリンクをユーザーにメールで送信する
3. ユーザーがそのリンクをクリックすると有効化できるようにする

## 11.1 AccountActivationsリソース

有効化用のリンクにアクセスして有効化のステータスを変更する部分では,REST のルールに従うと PATCH リクエストと update アクションを使用するべきである.しかし,メールで送られてきた有効化リンクをユーザーがクリックした際の挙動は PATCH ではなく,GET である(ただリンクをクリックしただけ).そのため,GET リクエストを受けるために,update ではなく,edt アクションを使用する.

### 11.1.2 AccountActivationのデータモデル

有効化のメールには一意の有効化ト

元記事を表示

accepts_nested_attributes_for

accepts_nested_attributes_forを定義し、親子関係のある関連モデルで、親モデル作成と同時に子モデルも作成することができます。

“`ruby:machine.rb
class Machine < ApplicationRecord has_many :parts accepts_nested_attributes_for :parts end ``` ```ruby:part.rb class Part < ApplicationRecord belongs_to :machine end ``` こんな感じで定義しておけば、作成するMachineに紐づくPartモデルを作成できる ```ruby # 以下のような値をcontrollerで受け取る params = { machine: { name: '紅蓮可翔式', parts_attributes: [ { name: '輻射波動砲' }, { name: '飛翔滑走翼' }

元記事を表示

Viewを介さずActiveStorageを使いたい

#解決したいこと
`ActiveStorage 使い方`みたいな感じでググると、viewに画像アップロードのインターフェースを設置した上で、`form_with`を使ってアップロードできます、という記事が多く見られます。
そこで本記事では、viewのアップロードを介さずにモデルと画像とを紐付ける方法をご紹介します。
#どんなユースケース
画像のアップロード機能無しにモデルと画像を紐付けたいことなんてある?という方もいるかと思うので、先に自分が実際に導入したいモチベーションとなったユースケースについて説明します。

僭越ではありますが私は現在、TwitterAPIを通じて、ネット古着屋の情報を収集するサービス[「Clotion」](https://clotion.herokuapp.com/)を鋭意開発中です。(よかったら見ていってください)

このサイトを実現するに当たり、各Twitterアカウントが掲載した画像を取得する必要がありました。各TwitterアカウントはShopモデルとして定義しているので、`Shopモデルがimageモデルを複数持つ` という状況を作ろうとしたときに、`

元記事を表示

【Rails 5】ActiveRecord::RecordInvalid: Validation failed: Hoge must exist

### tl;dr
[こちら](https://qiita.com/junara/items/ca6f65d2f2a27f185f0e)の記事を参考にさせていただきました。

belongs_toに`optional: true`を付与すれば良いようです。

“`ruby:user.rb
class User < ApplicationRecord belongs_to :company, optional: true end ``` ### 再現方法 Rails5でCompanyとUserを1対多で結んだ状態でテーブルを作成します。 ```ruby:user.rb class User < ApplicationRecord belongs_to :company end ``` ```ruby:company.rb class Company < ApplicationRecord has_many :users end ``` この状態でdb:seedでUserを100人ほど作成しようとしたら題名のエラーが発生しました。 ### 原因 Rails 5.1か

元記事を表示

Railsチュートリアル 第11章 アカウントの有効化 – authenticated?に関する想定外のテスト失敗と、その解決

# 前提

[Railsチュートリアル 第11章 11.3 アカウントを有効化する](https://railstutorial.jp/chapters/account_activation?version=5.1#sec-activating_the_account)の最後のほうに、「抽象化された`authenticated?`メソッドに対するテスト」という項目がありました。

変更が必要な実装は以下2つです。

* `SessionsHelper#current_user`メソッド
* `UserTest`の「authenticated? should return false for a new user with nil digest」テスト

# 発生した問題

しかしながら、私の環境では、当該2つのメソッドの実装を変更しても、まだテストが成功しませんでした。内容は以下です。

“`
# rails test
Running via Spring preloader in process 13807
Started with run options –seed 22372

元記事を表示

【Rails】Deviseの基礎

# 初めに
Deviseはrailsを扱ったことがある人なら誰もが一度は実装するであろう有名なgemです。
しかし、機能自体は実装できたとしてもいまいちどこが動いて実装しているのかわからなかったり、いまいちどんな仕組みなのか掴めていない人も多いのではないでしょうか。
そこで今回はdeviseの基礎基本を自分なりに書いてみました。

#主な機能
Deviseは主に10個のmoduleからなるgemです。
一つ一つのmoduleを組み合わせてみなさんが使っているようなDeviseの機能として機能します。
しかし、最初から全てが機能しているわけではなく、最初は一部のみ機能しています。

|module名|機能|
|:—|:—|
|Database Authenticatable|データベースに保存するパスワードを暗号化する|
|omniauthable|facebookやtwetterなどを利用したログイン新規登録の機能を実装する際に使う(https://github.com/omniauth/omniauth)|
|confirmable|サインインをした際に既にアカウントが登録さ

元記事を表示

rails Bootstrap4(レスポンシブなNavbar)

railsにてBootstrap4を使って簡単なレスポンシブのNavbarを実装する
##完成品
[![Image from Gyazo](https://i.gyazo.com/18359c7214298e7feb85aa3e5b26618c.gif)](https://gyazo.com/18359c7214298e7feb85aa3e5b26618c)

##環境
ruby:2.5.1
rails:2.5.3
DB:mysql(Sequel Pro)
ブラウザ:Google
OS:Mac(10.14.6)

##Github
https://github.com/tana1818/frutweet

##作成手順

####アプリケーション作成
“`ruby:ターミナルで置きたいディレクトリに移動してから
rails new frutweet -d mysql
“`

 
####Gemインストール、DB作成、scaffoldとマイグレーション実行
“`ruby:frutweet
bundle install #gemをインストール
rake db:create #DB

元記事を表示

datetime_selectで年月日が「2000-01-01」になってしまった件

datetime_selectで年月日+時刻を扱ったけれど、
年月日が「2000-01-01」になってしまった件。
自分の覚書として残します。
 
### バージョン
Ruby:2.6.3
Rails:5.2.3

### 状況
Scheduleモデルにdeadlineカラムを持たせただけ。

“`ruby:views/schedules/_form.html.erb
<%= form_with(model: schedule, local: true) do |form| %>

<%= form.label :deadline %>
<%= form.datetime_select :deadline %>
<%= form.submit %>

<% end %>
“`
こんな入力画面。
![スクリーンショット 2019-12-07 18.56.49.png](https://qiita-image-store.s3.ap-n

元記事を表示

【Rails】簡単に使える暗号化gem`attr-encrypted`を使ってみた

## はじめに
Railsアプリにおいて、ログインパスワードは**bcrypt**を使ってUserモデルに`has_secure_password`と記載すれば簡単に暗号化出来ます。

でも、それ以外にもトークンなど**そのまま保管したくない情報**が出たときどう処理するんだろう?と疑問が発生。

そこで調べたところ、**attr-encrypted**という便利なgemがあったので使い方をまとめました。

[こちらが公式のREADME](https://github.com/attr-encrypted/attr_encrypted)です。

## この記事が役に立つ方
– 暗号化は**bcrypt**の`has_secure_password`しか使ったことがない方

## この記事のメリット
– `attr-encrypted`を使って簡単に暗号化が出来るようになる

## 環境

“`
macOS Catalina 10.15.1
zsh: 5.7.1
Ruby: 2.6.5
Rails: 5.2.4
“`

## 前提・目的

– 今回暗号化したいデータの**カラム名*

元記事を表示

#Rails の FactoryBot + create_list で毎回ランダムに異なる値を 引数に与える方法は?

ないっぽいよ! 愚直にeach / map しよう。

“`rb
%w(NYC Boston SF Austin).map do |tb_location|
FactoryBot.create(:location, city: tb_location)
end
“`

[create_list with different values for the same attribute · Issue #787 · thoughtbot/factory_bot](https://github.com/thoughtbot/factory_bot/issues/787)

# Original by Github issue

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

元記事を表示

RailsにWebpackerでVue.jsを入れたら行う設定

環境: Rails 5.2/6.0、Webpacker 4.2、Vue.js 2.6

## コンパイラ入りのVue.jsを使う

.vueファイルの中のテンプレートではなく、Railsが出力したHTMLや`template:`で指定したHTMLをテンプレートとして使う場合は、コンパイラ(HTMLパーサ)入りのビルドを使う必要があります。

コンパイラ入りビルドを使わないと、ブラウザーでの実行時にHTMLをパースできなくなり、次のエラーが出ます。

“`text
[Vue warn]: You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into render functions, or use the compiler-included build.
“`

webpackの設定で、`environment.config.resolve.alias`を次のように指定すると、`import

元記事を表示

OTHERカテゴリの最新記事