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

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

【Rails】ラジオボタンの実装

ちょっと複雑だったのでまとめます。`customer`はモデル名です。

“`erb:erb
<%= f.label :receive_news, '受け取る', value: 1 %>
<%= f.radio_button :receive_news, '1' %>

<%= f.label :receive_news, '受け取らない', value: 0 %>
<%= f.radio_button :receive_news, '0' %>
“`
“`html:出力されるhtml


【Rails】kaminariを使用して基本的なページネーション機能を実装する

## 前提
bundlerを使用して、Gemfileでgemを管理していることを想定しています。

## 使い方
### 準備(インストール)
1.Gemfile内に`gem kaminari`を記述

“`ruby
# Gemfile
gem ‘kaminari’
“`

2.kaminariをインストール

“`shell
$ bundle install
# 「bundle」だけでもOK
“`

### 設定
#### 設定ファイル作成
1.設定ファイルを作成する

“`shell
$ rails g kaminari:config
“`

2.設定ファイルが作成される

config/initializersディレクトリ配下に「kaminari_config.rb」ファイルが作成されます。
作成されたファイルをいじることで、「kaminari」のデフォルト設定を変えることができます。

以下の記事に詳しく書かれていたので参考にしてみて下さい。
[Railsライブラリ紹介: ページングを行う「kaminari」](https://www.techscore.com/

元記事を表示

[Rails] setting.rb編集後の反映コマンド

rails consoleを使用しているときは、モデルの更新があったらコマンドを叩いて更新しないと反映されずにハマるので、メモ

`pry(main)> Settings.reload!`

元記事を表示

[Rails] lambdaを使う

アクション内にサクッと追加するファンクションを定義したい時に使うっぽい。
可読性を考えると後者の方かな。

“`ruby
def aaa
a = ->(num) {
puts num * 100
}
a.call(1)
end
“`
or

“`ruby
def aaa
a = lambda{|num|
puts num * 100
}
a.call(1)
end
“`

元記事を表示

「ActiveModel::ForbiddenAttributesErrorの対処方法

最近の勉強で学んだ事を、ノート代わりにまとめていきます。
主に自分の学習の流れを振り返りで残す形なので色々、省いてます。
Webエンジニアの諸先輩方からアドバイスやご指摘を頂けたらありがたいです!

#なぜエラーが発生したか?
このエラーが起きた状況は、Active Adminで作成したユーザー管理画面において編集機能を追加するために
actionsに:editを追加した所、[Routing Error No route matches [PATCH] “/admin/users/1″が発生](https://qiita.com/hirokik-0076/items/84123e00432087cf15ba/)
して、それを解決した後、編集したデータを更新した際に発生いたしました。

“`ruby

ActiveModel::ForbiddenAttributesError in Admin::UsersController#update
ActiveModel::ForbiddenAttributesError
“`

##なんのエラーか?

A(アンサー):Strong Par

元記事を表示

【Ruby on Rails】devise_token_authでTwitterログイン機能の実装

#前回の記事
[DockerでRuby on Rails + Reactを別々にアプリ作成する環境構築手順](https://qiita.com/dl10yr/items/b76969da1c2c33595a4a)
#やったこと
Rails(APIモード)でdevise_token_authを用いたTwitterログイン機能の実装
#参考記事
この記事を大変参考にさせていただきました。
[Rails 5 API + Vue.js + devise_token_authでTwitterと連携するSPAを作る(①RAILS編)](https://qiita.com/natsukingdom-yamaguchi/items/15142bd4ad77679afb04#3-rails-api%E3%81%ABtwitter%E8%AA%8D%E8%A8%BC%E3%82%92%E5%AE%9F%E8%A3%85%E3%81%99%E3%82%8B)
#実装手順
###Gemfileの追記
モジュールインストールのためにGemfileに追記

“`ruby:Gemfile
###auth/Twi

元記事を表示

非同期通信でメッセージを送信する

#非同期通信でメッセージ送信をする手順を追ってみる

非同期通信について、理解不足ながらに処理の流れを追ってみました
自身が実装した時の流れを参考記事含め、追っているとも言えます
もう一度実装したい時にこれを見ればなんとなくでも分かるようにできればと思って書いてます
***

ここでは何をしているのかというと、チャットのメッセージ送信を非同期通信で行いたいというものです

##実装の手順
 1. フォームが送信されたらイベントが発火するようにする
 2. イベントが発火した時にajaxを使用して、messagesコントローラーのcreateアクションが動くようにする
 3. messagesコントローラーのcreateアクションでメッセージを保存してHTMLとJSONの場合で処理を分ける
 4. jbuilderを使用して、作成したメッセージをJSON形式で返す
 5. 帰ってきたJSONをdoneメソッドで受取り、HTMLを作成する(受取りが成功した場合)
 6. 作成したHTMLをメッセージ画面の一番下に追加する
 7. 失敗した場合の処理を追加する

###コードを見ながら手順を

元記事を表示

[日本語化]i18n

##日本語化したい( ・∇・)

####1,application.rbに記述
####2,ymlファイルを作成して中身をコピペする
「config/locales」フォルダに、「devise.ja.yml」および「ja.yml」という名前のファイルを新規作成

[devise.ja.yml](https://github.com/tigrish/devise-i18n/blob/master/rails/locales/ja.yml)
[ja.yml](https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml)

####3,終了(必要に応じてyml中身の記述を増やしたり変えてください)

フラッシュなどの日本語化はこれでOKですがモデルのバリデーションなどはこれでは変わりません。

なのでGemインストールして実装していきます

####1,Gem記述してbundle

“`ruby:Gemfile
gem ‘rails-i18n’
“`
####2,application.rbに記述

`

元記事を表示

【Rails】画像をリサイズしてアップロード

##ModelとTableを作成
“`terminal
$ rails g model Hoge image
$ rails db:migrate
“`

##gemを追加
“`rb:Gemfile
gem ‘carrierwave’
gem ‘mini_magick’
“`
“`terminal
$ bundle install
“`

##Uploaderを作成
“`terminal
$ rails g uploader Hoge
“`
画像を保存するディレクトリや、許可する拡張子等を必要に応じて修正。
よく使う設定はあらかじめコメントとして記載されています。

“`app/uploaders/picture_uploader.rb
class HogeUploader < CarrierWave::Uploader::Base storage :file # アップロードファイルの保存先 def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.i

元記事を表示

【MySQLエラー】 ERROR! The server quit without updating PID file

鬼門のSQLエラー…
なかなかはまったので解決までに試したことを記述します。

# エラーに到るまで
PCの動作が重くCPUファンも常に回ってるような状況だったので、再起動してみることに。
再起動…おっ!治ったっぽい:grin:

しかしmysqlサーバー立ち上げようとしたら

“`:ターミナル
ERROR! The server quit without updating PID file
“`
のエラー発生:weary:

# 環境確認

“`:ターミナル
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.14.6

$ mysql –version
mysql Ver 14.14 Distrib 8.0.18_1, for osx10.14 (x86_64) using EditLine wrapper

$ ls /usr/local/Cellar/mysql*
/usr/local/Cellar/mysql:
8.0.18_1

/usr/local/Cellar/mysql@5.7:
5.7.28

元記事を表示

Railsチュートリアル 第13章 ユーザーのマイクロポスト – 画像アップローダーのテストに存在する一つの不具合と、その解消策

# 画像アップローダーのテスト(オリジナル)

Railsチュートリアル本文においては、第13章の[演習 – 基本的な画像アップロード](https://railstutorial.jp/chapters/user_microposts?version=5.1#sec-exercises_basic_image_upload)に登場するテストです。

同演習で`FILL_IN`となっている箇所を埋めると、テストの内容は以下のようになります。

“`ruby:test/integration/microposts_interface_test.rb
require ‘test_helper’

class MicropostsInterfaceTest < ActionDispatch::IntegrationTest def setup @user = users(:rhakurei) @other_user = users(:skomeiji) end test "micropost interface" do log_in_as(@user)

元記事を表示

Errno::ENOENT: No such file or directory @ rb_sysopenの対処法

__備忘録__
テスト用のDBを作ろうとして、“rake db:migrate“を実行したら以下のようなエラーが起きた。
原因は、spec配下に“db“のディレクトリーがなく“schema“が無かったために下記のエラーが生じていた。
ちなみに、“migrate“は成功しているので無視しても平気。
でも、エラーを無視するのは気持ち悪いのでschemaファイルを作って再度、“drop“,“create“,“migrate“を実施した。
(僕の場合は、dbディレクトリーを丸ごとコピーしてspec配下にペーストした。)

結論としては、以下のエラーが起きたら“schema“を作成し、再度“rake db:migrate“をしてあげる事により解消できる。

“`console
rake aborted!
Errno::ENOENT: No such file or directory @ rb_sysopen – /Users/kaye/Desktop/work/sample_app/spec/dummy/db/schema.rb
/Users/kaye/.

元記事を表示

webpackerでmp3を使う場合 (audio_tag) Railsで音を鳴らす方法

# 実行環境
– macOS
– Ruby 2.6.5
– Rails 6.0.1
– ts 3.7.3
– es2019

# 使う場合
– `app/assets/audios` にmp3ファイルを置く
– webpackerの設定ファイルを変更する

## サンプルコード
– `app/assets/audios/test.mp3` を配置

“`config/webpacker.yml
static_assets_extensions:
# 以下の項目を追記する
– .mp3
“`
webpackerをdevelopment環境で使う場合に拡張子を追加しておく

“`app/assets/config/manifest.js
//= link_tree ../audios
“`
audiosファイルをmanifestにつなげる

“`app/views/top/index.html.haml
= audio_tag(‘test.mp3’, id: ‘test-audio’)
“`

“`app/javascript/packs/test

元記事を表示

AWSでのデプロイ手順②サーバー(EC2インスタンス)環境設定

前回内容
[**STEP1 ネットワーク環境設定**](https://qiita.com/tksh8/items/9a8e88a777a3a4ee7a09#step1-%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E7%92%B0%E5%A2%83%E8%A8%AD%E5%AE%9A)
[**STEP2 EC2の設定**]
(https://qiita.com/tksh8/items/9a8e88a777a3a4ee7a09#step2-ec2%E3%81%AE%E8%A8%AD%E5%AE%9A)

今回内容
[**STEP3 EC2インスタンスの環境構築**]
(https://qiita.com/tksh8/items/3d2f2eeaf0e8de291b6d#step3-ec2%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%81%AE%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89)
[**STEP4 gitとの連携、ア

元記事を表示

RoR|retry_on で指定した回数でリトライが出来ているかテストする

# はじめに

`retry_on` の `attempts` オプションを使って何回リトライするかを指定することが出来ます。「ほんとうにリトライできている?」と指定した回数でリトライが出来ているかのテストについての記事です。

# やったこと

## パラメータの検証

`retry_on` はクラスメソッドなので呼び出したときに期待する回数が検証できるかな?と思ったんですがクラスの中身がロードされた時点で評価されるので RSpec ではメソッド呼び出しのテストは失敗します :sweat: だってもう呼び出し終わっているもの。

“`ruby
expect(GuestsCleanupJob).to receive(:retry_on).with(wait: 2.hours, attempts:3).exactly(3).times
“`

## `retry_on` のブロックで指定した内容で検証する

`retry_on` のブロックはジョブがリトライする度に実行するのではなく `attempts` オプションで指定した回数が超えたときに評価するので今回の何回できたか?というの

元記事を表示

Rails6 のちょい足しな新機能を試す 115(PostgreSQL データベース存在チェック編)

 # はじめに

Rails 6 に追加された新機能を試す第115段。 今回は、`PostgreSQL データベース存在チェック` 編です。
Rails 6 では、PostgreSQLのデータベースを存在するかどうかをチェックする方法が少し変わりました。
データベースが存在しないときに、 `bin/rails db:migrate` を実行した場合、 PostgreSQLのロケールが英語以外でも、 `ActiveRecord::NoDatabaseError` が発生するようになりました。

Ruby 2.6.5, Rails 6.0.2.1, Rails 5.2.4.1 PostgreSQL 12.1 で確認しました。 (Rails 6.0.0 でこの修正が入っています。)

“`shell
$ rails –version
Rails 6.0.2.1
“`

今回は、PostgreSQL を日本語ロケール (`ja_JP.UTF8`) で、Docker環境で起動し、 `bin/rails db:migrate` コマンドを使って Rails 6.0.2.1 と Rails 5

元記事を表示

【Heroku】PG::DatatypeMismatch: ERROR: の対処法

開発環境SQLite 本番環境PostgreSQLによって起こるheroku run rails db:migrateできない問題に遭遇し、かなりググって時間を使ってしまったので対処法を記載。

***手順1***
エラーが起きている開発環境のmigrationファイルを削除(or変更)

***手順2***

“`
heroku pg:reset DATABASE_URL
“`

ちなみにここで治ることもあるらしい。

***手順3***

“`
git push heroku master
“`

開発環境のDBの変更を本番環境に適用するためのpush

***手順4***

“`
heroku run rails db:migrate
“`

手順がゲシュタルト崩壊しました

元記事を表示

DockerでRuby on Rails + Reactを別々にアプリ作成する環境構築手順

#やったこと
Dockerを用いてAPIモードのRails(バックエンド)とReact(フロントエンド)を作成する開発環境の構築を行った。

#1, 各種ファイルの用意
プロジェクト用のフォルダを用意して、Rails側のapiフォルダとReact側のfrontフォルダに分ける。
プロジェクト用フォルダの直下に、docker-compose.ymlを置く。
![スクリーンショット 2020-01-08 6.30.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367226/1e3803a0-9bca-c3d2-d56a-7954080275df.png)

###docker-compose.ymlの記述
この記事( https://qiita.com/takano-h/items/84ae73b41eef83602bd9 )を参考に記述。

“`docker-compose.yml
version: ‘3’

services:
db:
image: postgres
volu

元記事を表示

[Rails] Transaction内で条件分岐してrescue

# そもそもTransactionなぜ必要なのか
複数にまたがるモデルのデータ同時に保存したいときや、`find_each`などで複数回データをいじって保存したいときに、`Transaction`を利用します。

“`users_conroller.rb
def create
User.transaction do
@user.save!

respond_to do |format|
format.js { render : ‘action名’ }
end
rescue => e
logger.debug(“failed. because of #{e}”)
redirect_to ~~~path
end
end
“`

上記のようなコードは問題なく動作します。
しかし下記の様にもしcontroller内に渡ってくるparamsによって`if..end`で囲むと、`syntax error`が発生します。

“`users_controller.rb
def create
if user_params[:user_

元記事を表示

rails環境構築 gem install sqlite3 エラー

railsを始めようと思い、下記サイトを参考にrailsのインストールを試みたところ、
rails new app名を実行したところで下記エラーがでました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/561469/f2d97d3e-d470-0dc1-5f24-02c28e392401.png)

sqlite3のgemがないのがエラーの原因だと思ったため、gem listを実行してみると、確かにsqlite3がありませんでした。

なのでgem install sqlite3でsqlite3をインストールしようとしたところ、次のエラーがでました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/561469/9ce97471-072e-a177-858f-3d8cd82e8aef.

元記事を表示

OTHERカテゴリの最新記事