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

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

【Rails】errors.addって何?

モデルでは特に考えずに`errors.add(:base, ‘名前の文字数オーバー’)`とかしておけば良いかーみたいな風潮ありますよね:church:
これ

“`.rb
> user = User.new
> user.errors
=> #, @messages={}, @details={}>
> user.errors.add(:base, ‘名前の文字数オーバー’)
> user.errors.full_messages
=> [“名前の文字数オーバー”]
“`

そもそも`.add`ってなんなのさと、すぐraiseされるならわかるけど、何個も追加(add)できるの????

## errors.addの使い方一覧
結論から書きます。

“`.rb
# シンプルな構文(どんなエラーなのか)
> user.errors.add(:base, ‘名前の文字数オーバ

元記事を表示

CarrierWaveでpng画像を処理したときに色空間がGRAYになってしまってた

## バージョン

* ruby 2.6.1
* Ruby on Rails 5.2.3
* MacOS Catalina 10.15.1
* ImageMagick 7.0.9-5
* gem mini_magick 4.9.5
* gem carrierwave 1.3.1

## 問題

CarrierWaveでMiniMagickを使って画像を処理する時。例えば、resize_to_fit とかresize_and_pad とか resize_to_fill とかを使うと、png画像の色空間が元々RGBだったのにGRAYになってしまう現象があった。

## 調査

どうやら、色空間をカラーで持っていても、グレイスケールっぽい画像だとImageMagickがカラースペースをグレイスケールに変換してしまうようだった。
なぜ・・、やめてくれ・・!

## 解決方法

上記した resize_to_fit とかのメソッドには、 combine_options という名前付き引数が渡せる。これは[ImageMagickのオプション](https://www.imagemagick.org

元記事を表示

redirect_toとrenderの違い・使い分け

#【結論】アクションを実行するかしないかの違い

“`ruby:xxx_controller.rb
def create
message = Message.new(message_params)
if message.save
redirect_to :new
else
render :new
end
end
“`

このようなcreateアクションがあります。

・`save`が成功した場合は`newアクションが実行され`、一度ページがリセットされnewのページが表示されます。

・`save`が失敗した場合は`newアクションを通さず`、入力された情報はそのままにnewのページが表示されます。

保存が成功したらフォームに情報を残しておく必要はありませんよね。
保存が失敗したらエラーメッセージを表示するなどして、入力情報のエラー部分のみを変更してもらいましょう。

参考
>https://www.pikawaka.com/rails/render

ではまた!

元記事を表示

フォロー機能がほしいぃぃ

`RailsTutorial`を参考にフォロー機能をつけました。

簡単にまとめます。

※クラス名・id名は本家と変えたところがあります。
※ところどころ自己流にアレンジしています。ご容赦ください。

#Relationshipモデル

“`:ターミナル
$ rails g model Relationship follower_id:integer followed_id:integer
“`

“`ruby:db/migrate/20191128014554_create_relationships.rb
class CreateRelationships < ActiveRecord::Migration[5.2] def change create_table :relationships do |t| t.integer :follower_id t.integer :followed_id t.timestamps end add_index :relationships, :follower_id

元記事を表示

Railsチュートリアル 第11章 アカウントの有効化 – 前提

# サンプルアプリケーションの現状と、これから実装する変更内容

Railsチュートリアルの第10章終了時点では、「新規登録したユーザーは、はじめからすべての機能にアクセスできる」という実装となっています。第11章では、「アカウントを有効化するステップを新規登録の途中に差し込むことで、本当にそのメールアドレスの持ち主なのかを確認する」という機能を実装していきます。

# アカウントの有効化プロセス

## 概要

「アカウントの有効化」というユースケースは、大まかには以下のプロセスからなります。

1. 有効化トークン・ダイジェストを新規に生成したユーザー情報と関連付ける
2. 有効化トークンを含むリンクを、ユーザーにメールで送信する
3. ユーザーが2.のリンクをクリックすると、当該アカウントが有効化される

## 詳細

上記「アカウントの有効化プロセスの概要」をさらに詳細に見ていくと、以下のような機能の実装が必要となるのがわかります。

* ユーザーの初期状態は、「有効化されていない(unactivated)」であること
* ユーザー登録が行われた際に、以下が生成されること

元記事を表示

【Rails】ユーザーの情報の編集【Rails Tutorial 10章まとめ】

##Usersコントローラの編集
Usersコントローラにアクションを追加し、ユーザー情報の編集やユーザー一覧の表示、ユーザーの削除を行えるようにする。

##ユーザー情報の編集
###editアクションと編集フォーム
Usersコントローラにeditアクションを追加する。
editアクションに対応するURLはusers/:id/edit(名前付きルートはedit_user_path(user))なので、params[:id]を使えば編集したいユーザーを取得できる。

“`app/controllers/users_controller.rb
def edit
@user = User.find(params[:id])
end
“`

editアクションに対応するeditビューは以下のようになる。

“`erb:app/views/users/edit.html.erb
<% provide(:title, "Edit user") %>

Update your profile

【Rails】パンクズリストの作り方

#まえがき
みなさんパンくずリストは知っていますでしょうか。どこかで耳にした方もいるかもしれません。ちょっと変わった名前ですがbreadcrumbsと書くとかっこいいですね。このパンくずリストですが名前によらずとても便利な物なのでぜひ作り方を覚えましょう。

#パンクズリストとは
`ホーム>おすすめ一覧>家電製品`
のような現在いる位置を視覚的に見ることができる物です。大抵画面上部に用いられることが多いです。
これはよくSEO対策的に使われることが多く、SEOに詳しい人にとってはおなじみなのではないでしょうか。

パンクズリストを作るメリットは以下の通りですです。

#設置するメリット
####ユーザビリティーの向上
パンくずリストを用いることで視覚的に現在いる位置を構造的に見ることができるので、そのwebアプリを使うユーザーがサイト内で迷子になることがなくなり、ストレスなくサイト内巡回をすることができます。また、様々なユーザーはみなトップページからサイトに訪れるわけではなくそれぞれ必要なページに直接飛んでくるので、本当に目的のページを開けているか確認をするという使い方もされます。

元記事を表示

Rails Tutorial Memo #4

# 第9章 発展的なログイン機構

#### attr_accessor

Rubyの「attr_accessor」ってなんぞや、という人へ

とりあえず理解がかなり浅い

元記事を表示

ruby on rails 基本2

#はじめに

この記事は、2019/11/1からプログラミング学習を始めた学生がプロのプログラマーになるまでのアウトプットする為の書き込みの場である。

#Rails コマンド編
– **rails s**
– railsをターミナルにて起動するコマンド
– **rails db:create** 
– 新しくデータベースを作成するにはrails db:createというコマンドを実行します
– **rails routes**
– アプリケーションのディレクトリでコマンドを実行すると、そのアプリケーションのルーティングを確認することができます。
– **rails g controller**
– コントローラーやそれに付随するファイルを一度に作成してくれるコマンドです
– **rails g migration**
データベースのテーブルの情報を追加・削除・変更するために、マイグレーションファイルを生成するコマンドです
– **rails db:migrate**
– マイグレーションファイルに記述した内容を、実際にデータベースに適用するためのコマンドです
– **r

元記事を表示

【AWS EC2】デプロイに1週間かかったので、起こったことをありのままに全て話すぜ!

#はじめに
ただいまプログラミングスクールにて学習する身でございます。
さて、そんな私が初めてデプロイした時にめっちゃ時間がかかったっていう話です。
基本的には、カリキュラム通りにやっていれば問題なくデプロイできるのですが。
な ぜ か アプリを3つ、インスタンスが6つ作るはめになってしまいました。

カリキュラムはちゃんと読もうね!

#序の口
エラーは出ましたが、なんとか対処できるレベルのやつ。

[【AWS EC2】bundler -v -bash: bundler: コマンドが見つかりません
](https://qiita.com/kaorioka09jm/items/c1ed1c7749cb7c84a877)
**→原因:bundllerをインストールするコマンドの入力し忘れ**

[【AWS EC2】$sudo vim /etc/nginx/conf.d/rails.conf 書き込みできない
](https://qiita.com/kaorioka09jm/items/8524733eff31040c3d6f)
**→原因:権限付与のコマンドの入力し忘れ**

[【AWS

元記事を表示

【AWS EC2】自動デプロイ設定後に、修正ファイルを再デプロイする手順

①まずデスクトップアプリでgithubのmasterに編集ファイルをpushしてマージする。

②EC2でログインして該当ディレクトリまで移動

EC2にログイン

“`
$ cd .ssh
$ ssh -i chat-space.pem ec2-user@[生成したElastic IP]
“`
アプリまで移動

“`
$ cd /var/www/app/
“`

③②の位置でマスターをpull

“`
$ git pull origin master
“`
これで変更がEC2サーバー上にきたか確認

④念の為プロセスを切る

“`
$ ps aux | grep unicorn
$ kill プロセス番号
“`

⑤ローカルで自動デプロイする。

“`
$ bundle exec cap production deploy
“`

⑥デプロイしたIPで確認

元記事を表示

rails6.0ではsend_dataでファイル名を明示的にエンコードしなくても文字化けしなくなってる

タイトルの通り、rails6.0以前では`send_file`でファイルダウンロード機能を実装しているとIE, edgeの場合にファイル名が文字化けしてしまうので、明示的にエンコード処理をして対策を行う必要がありました。
rails6.0ではこの対応が不要になるコミットがされています。

# rails6.0以前の場合

これだと、IE、edgeの場合にファイル名が文字化けしてしまいます。

“`ruby
data = “XXX”
filename = “サンプルファイル.txt”
send_data(data, filename: filename)
“`

その為、以下の様に明示的にエンコードしてあげる必要がありました。

“`diff
data = “XXX”
filename = “サンプルファイル.txt”
+ encorded_filename = ERB::Util.url_encode(filename)
– send_data(data, filename: filename)
+ send_data(data, filename: encorded_file

元記事を表示

【Heroku】デプロイ時の”Missing encryption key to decrypt file with.”を乗り越える

はじめてのHerokuデプロイ。
下記のQiita記事にならって進めていました。

[【初心者向け】railsアプリをherokuを使って確実にデプロイする方法【決定版】](“https://qiita.com/kazukimatsumoto/items/a0daa7281a3948701c39”)
(丁寧にまとめていただき、本当にありがとうございます。)

おかげさまで順調に進み、デプロイ間近でわくわくしていたところ以下のエラーと遭遇しました。

“`ターミナル
Missing encryption key to decrypt file with. Ask your team for your master key and write it to ~~~~~~/config/master.key or put it in the ENV[‘RAILS_MASTER_KEY’].
“`
要するに、”復号するためのキーが見つからない”ということです。
# なぜ?
と、思いましたが、たしかにそうですね。

GitHubと連携してデプロイを試みていましたが、リモートリポジトリに`mas

元記事を表示

【Rails】Rails側で定義した変数をJavaScriptに簡単に渡せるgem 「gon」を使ってみた

## はじめに
Railsアプリケーションを作成中、JavaScriptにRails側で定義した変数を渡したくなり、調べたところ`gon`というかなり使い勝手のいいgemがあったので導入してみました。

## この記事が役に立つ方
– Rails側で定義した変数をJavaScript側でも使いたい方

## この記事のメリット
– `gon`を使ってRailsで定義した変数をJavascriptに渡せるようになる

## 環境
– macOS Catalina 10.15.1
– zsh: 5.7.1
– Ruby: 2.6.5
– Rails: 5.2.3
– Docker: 19.03.5
– docker-compose: 1.24.1
– gon: 6.3.2

## gem`gon`とは?
シンプルにRailsアプリ内でJavaScriptに変数を渡すことが出来るgemです。
RSpecにも変数を渡せたりと、便利。

![スクリーンショット 2019-12-01 22.05.52.png](https://qiita-image-store.s3.ap-northeast-

元記事を表示

【初心者向け】「rails new」で生成されるフォルダ、ファイルをざっくり解説してみた。

# はじめに

この記事はDMM WEBCAMP アドベントカレンダー2日目の記事です。

こんにちは。DMM WEBCAMPのメンターをしてます。このアドベントカレンダーのいいだしっぺです。

今回は、Railsを触る上で外せない`rails new`コマンドで生成されるフォルダ、ファイルについて、解説していきたいと思います。

また、Rails5と6のファイル構成の違いも軽く触れてあります。

## 対象者
– Rails触りたての方、触ったことのない方。
– Railsを使ってるけど、具体的にこのフォルダで何ができるのかイマイチな方。
– 他言語のMVCフレームワークを触っていて、Railsを理解したい方。

## 環境

macOS Catalina 10.15.1
Rails: 6.0.1
Ruby: 2.6.5

# そもそもrails newとは

`rails new`コマンドは、Railsを使う上で必要不可欠なファイルを一度に作成してくれるコマンドです。
むしろこれを打たないと始まんないじゃないかってぐらい大事なコマンドです。
実行したらたくさんのファイルを生成した

元記事を表示

#Rails で 存在しない全てのパスへの GET / POST / PUT / PATCH / DELETE / OPTIONS リクエストで 404 NotFound を返すようにエラーハンドリングする

# 注意

結構怖い
非推奨

# 方法

routes.rb の **最下部** でこうだ
上の方に書くと優先マッチしてダークホールになってしまうかも

“`rb
match ‘*path’, to: ‘errors#not_found’, via: :all
“`

一個ずつメソッドを書く場合はこう

“`rb
get ‘*path’, to: ‘errors#not_found’
post ‘*path’, to: ‘errors#not_found’
put ‘*path’, to: ‘errors#not_found’
patch ‘*path’, to: ‘errors#not_found’
delete ‘*path’, to: ‘errors#not_found’
match ‘*path’, to: ‘errors#not_found’, via: :options
“`

# rspec でのテスト

こんなんで

“`rb
require ‘rails_helper’

describe ‘not found path’, typ

元記事を表示

#Rails error handling : routing not existence all path with request method GET / POST / PUT / PATCH / DELETE / OPTIONS and return 404 not found

# Warning

do not use easy

# How

“`rb
match ‘*path’, to: ‘errors#not_found’, via: :all
“`

or describe each request types

“`rb
get ‘*path’, to: ‘errors#not_found’
post ‘*path’, to: ‘errors#not_found’
put ‘*path’, to: ‘errors#not_found’
patch ‘*path’, to: ‘errors#not_found’
delete ‘*path’, to: ‘errors#not_found’
match ‘*path’, to: ‘errors#not_found’, via: :options
“`

# rspec test example

“`rb
require ‘rails_helper’

describe ‘not found path’, type: :request do
describe ‘g

元記事を表示

GraphQLのmutationでargumentにオブジェクトを渡す

graphql-ruby で Mutation を書いていて、 argument にスカラ型ではなくオブジェクトを渡す時に variables を併用する場合の書き方で詰まったのでメモを残しておく。

## 環境
– Rails 6.0.0
– graphql-ruby 1.9.14

## 目標
– createUser という mutation の argument にオブジェクトを渡す
– クライアント側のクエリでは variables を用いる

## 手順
### MutationType にフィールドを追加する
“`rb:app/graphql/types/mutation_type.rb
module Types
class MutationType < Types::BaseObject field :createUser, mutation: Mutations::CreateUserMutation end end ``` - mutation_type.rb に `createUser` というフィールドを追加し、 Mutations::Cre

元記事を表示

ぼくのかんがえたさいきょうのAPIドキュメント運用

# ドキュメントちゃんと保守できてますか?

API開発とドキュメントの保守は切っても切れない問題です。

仕様の記述はもちろんのこと、サンプルを試せるAPIクライアントや、仕様に則った実装になっているかテストも自動化したいですよね。

本記事では、現在開発中のAPIアプリケーションで、実際に僕が試行錯誤していく中でたどり着いたベストプラクティスを紹介しようと思います。

# アーキテクチャ
– iOSアプリのバックエンドとしてJSONを返すAPIサーバー
– Rails6 × MySQL5.7 on Docker

[いつもの](https://apps.apple.com/jp/app/%E3%81%84%E3%81%A4%E3%82%82%E3%81%AE-3%E7%A7%92%E3%81%A7-%E4%B8%80%E7%95%AA%E3%81%8A%E5%BE%97%E3%81%AA%E3%81%8A%E8%B2%B7%E3%81%84%E7%89%A9/id1436665195) というお買い物アプリです。

 2019-12-01</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>Rails</div>
<div class='tag-cloud-link'>RSpec</div>
<div class='tag-cloud-link'>Docker</div>
<div class='tag-cloud-link'>swagger</div>
<div class='tag-cloud-link'>OpenAPI</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/sakuraya/items/37e73581e90e137b6487'>元記事を表示</a></div>
<h3 id=Rails+heroku+LINE Messager APIで秘書的なLINEbotを作ってみた(ゴミ出しの通知編)

![IMG_7844.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224974/373d9a29-65a5-2b56-1112-fdce053fe945.png)

#作るもの
毎日決まった時間になるとゴミ出しについて通知してくれる簡単なLINEbot。
ゆくゆくは天気/交通情報/イベントなども共有してくれるbotにしたいと思っています。
アイアンマンに出てくる人工知能ジャーヴィスをお節介おばさんにしたイメージです。

![dims.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224974/c083e4cc-75ea-4191-5a46-e18ec9c91104.jpeg)

#使用した言語/フレームワーク/ライブラリ/サービス
-Ruby
-Ruby On Rails6
-Heroku
-LINE Messager API

#大まかな手順
1.メッセージをオウム返しするLINEbotを作る
2.LINEにメッ

元記事を表示

OTHERカテゴリの最新記事