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

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

複数のカラムを更新するメソッドまとめ【Ruby on Rails】

Railsには複数のカラムを同時に更新するメソッドが複数あるため、違いをまとめました。


### assign_attributes

特徴

* DBの保存はされない。
* alias(別名) は attributes=

使用例 (Userというテーブルがある場合)

“`ruby
user = User.first
user.assign_attributes(family_name: “foo”, given_name: “bar”)
user.save

#attribute=の場合
user.attributes = { family_name: “foo”, given_name: “bar” }
“`

保存はされないので、saveを呼び出す必要があります。


### update_attributes

特徴

* DBの保存に保存される。
* alias(別名) は update
* バリデーションのチェックやコールバックの呼び出しも行われる。

元記事を表示

【Rails】rails_adminでコピペ新規作成する方法【rails_admin_clone】

#概要
rails_adminを使ってデータ登録するにも、毎回ゼロから打ち込むのめんどくさかったです。
コピペ&新規作成&登録したい!

そこで見つけた「rails_admin_clone」のgemですが、日本語解説が見当たらなかったので一応投稿しておきます。

#導入方法

公式Git
https://github.com/dalpo/rails_admin_clone

ぶっちゃけ全部これ見てやれば良いですね……。
Gemfileでの順番が大事だよ!というのだけ注意すれば良さそう。
(順番なんかが影響する事あるんか……)

メソッドの記述場所だけ分かりにくかったのですが、app/model/でそれぞれのモデルに書けば良かったです。

##Gemfile

“`text:Gemfile
gem ‘rails_admin_clone’
gem ‘rails_admin’
“`

順番注意!
書いたらbundle install

##共通設定
cloneのaction追加、これは必須。

“`ruby:config/initializers/rails_admin.rb

R

元記事を表示

【Rails】jpostalとjp_prefectureを用いて住所自動入力の実装

# 目標

**ユーザー新規登録画面で郵便番号を入力すると、それ以降の住所(番地まで)を自動入力する。**
![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579893/fb8341fb-4481-c06f-2d21-59afcd0817ef.gif)

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

# 前提

下記実装済み。

・[Slim導入](https://qiita.com/matsubishi5/items/b639ffddecc626856039)
・[Bootstrap3導入](https://qiita.com/matsubishi5/items/b117c95f4dd71340cc80)
・[ログイン機能実装](https://qiita.com/matsubishi5/items/5bd8fdd45af95

元記事を表示

gem deviseのインストールからモデル作成まで

## deviceとは▼
Railsにおいて認証機能を一から作成するとなると非常に作業工程が多くなり、
またセキュリティ面の不安要素も残ります。

そこでGem(ライブラリ)を使うことで大幅に作業工程を減らし、
効率良く認証機能を実装するために作られたのがdeviseです。

## deviseの登録方法▼
まずフォルダ内にあるGemfileの最下部に下記コードを追加。

“`
gem ‘devise’
“`

次にターミナルにて**`bundle install`**を実行。
その後**`rails s`**を実行しローカルサーバを起動。

続いてdeviseのインストールを行います。
deviseの場合bundle installの他に**`rails g devise:install`**もターミナルで実行。

そしてdeviseのモデルを作成します。
deviseの場合は、**`rails g devise モデル名`**でモデルを作成します。

## まとめ▼

deviseのインストールからモデル作成までの作業は以上です。
お疲れ様でした!

元記事を表示

[Rails]謎のデータが追加されている

Railsチュートリアルを終え、掲示板機能を追加してみようとしています。
やりたかったことは、2つの異なるモデルのコレクションをcreated_atでソートしてまとめて表示したいということですが、よくわからない現象のメモです。
とりあえず解決したのですが、どこか間違っていたら教えて下さい。

コードが長いのでまずは飛ばしてください。

“`ruby
def show
@bbs_thread = BbsThread.find(params[:id])
@user = current_user
if @user
@bbs_post = @user.user_posts.build(bbs_thread: @bbs_thread)
else
# @bbs_post = AnonymousPost.new # (1)
@bbs_post = @bbs_thread.anonymous_posts.build # (2)
password_for_delete = cookies.permanent.sign

元記事を表示

can’t write unknown attribute `category_id`を解決した話

投稿機能でpost投稿する際にcan’t write unknown attribute`category_id`が出現した為、記録用に投稿。

#仕様
https://qiita.com/cawaz3/items/e755a58177212f2aca6c
テーブル構成等はこちらの記事を参考。
中間テーブルを実装し投稿時にタグidを紐付けた。

#症状
投稿画面にて投稿内容記述後に投稿確認画面に遷移する設定にしているが上記のエラーが出てしまいうまく遷移されない様子。

#原因
カラム名の相違
post.controller.rbではcategory_idで記述していたのにも関わらずテーブルを確認した際にcategories_idになっていた。

“`ruby:post.controller.rb
def confirm
@post = Post.new(post_params)
session[:category_ids] = @post.category_ids
return if @post.valid?
flash.now[:alert] =

元記事を表示

Rails×LineBot で LINEnews風 techニュース まとめアプリを作る![前編]

# 今回したいこと
linebotとRailsでlinenews風アプリを作る
# 今回作ったもの
![ezgif-6-d27fd089a1f4.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538528/57e0f258-846f-7890-cf5f-e85130235f9c.gif)

ニュース と打ち込むとニュース記事の一覧が送られてくる
(朝何時に配信みたいな機能は次回実装予定です。)

# なぜ作ろうと思ったのか
自分がエンジニアインターンを始めて4か月弱たったが、もっとtech系のニュースに敏感になりたいと思った。
そして、linenewsっぽく受信できれば読む習慣がつくのではと思い、作ってみることに。
イメージとしては朝刊新聞みたいな

# 今回の実装環境
“`
Rails 6.0.3.1
ruby 2.6.1
“`
surface pro 6 でWSL使用
アプリ自体はherokuにデプロイ

# 制作の流れ

## 1. Line Developpersに登録する ~ her

元記事を表示

Ruby on Rails6 実践ガイド cp7~cp9 【メモ】

## はじめに
この記事の筆者はプログラミングを学習し始めたばかりの初心者です。間違いがあれば指摘していただけると幸いです。

## 概要
この記事は[Ruby on Rails6 実践ガイド](https://book.impress.co.jp/books/1118101134)を読んで学んだことを自分用のメモとして記録したものです。抜粋してピックアップするので読みづらいと思われます。すいません。
この本には、続編の[機能拡張編](https://book.impress.co.jp/books/1118101135)もあり、記事を書いている段階で二冊とも学習を終えています。復習もかねて記事を書いていくつもりです。
18のチャプターに分かれているので、見出しごとに区切っていきます。

前の記事
[Ruby on Rails6 実践ガイド cp4~cp6 【メモ】](https://qiita.com/nizi24/items/aca9a745ccda08081eeb)

## Chapter7 ユーザー認証(1)

##### コマンドで生成したファイルを削除する

“`
$ b

元記事を表示

Docker Composeのvolumesを使ってもっと効率的に

[Docker Composeを使った初期装備なRails6/PostgreSQL環境の作り方 \- Qiita](https://qiita.com/tanaken0515/items/0e207160c25a6b815561) の続編です。

前回の記事では、[Quickstart: Compose and Rails \| Docker Documentation](https://docs.docker.com/compose/rails/)に沿ってDocker Composeを使ったRuby2.7,Rails6,PostgreSQLでの開発環境を作る方法について紹介しました。

この記事では、前回の記事で構築した開発環境における問題点(不便な点)について述べたあと、Docker Composeのvolumesを使ってその問題を解決する方法について記載します。

想定する読者は前回と同じです。

> – Rails環境構築でいつも躓くの方(丁寧めに説明します)
> – 未来の自分(思い出せるように書きます)

## 問題点

結論から言うと、前回作った開発環境には**Gemを追

元記事を表示

Ruby on Rails6 実践ガイド cp4~cp6 【メモ】

## はじめに
この記事の筆者はプログラミングを学習し始めたばかりの初心者です。間違いがあれば指摘していただけると幸いです。

## 概要
この記事は[Ruby on Rails6 実践ガイド](https://book.impress.co.jp/books/1118101134)を読んで学んだことを自分用のメモとして記録したものです。抜粋してピックアップするので読みづらいと思われます。すいません。
この本には、続編の[機能拡張編](https://book.impress.co.jp/books/1118101135)もあり、記事を書いている段階で二冊とも学習を終えています。復習もかねて記事を書いていくつもりです。
18のチャプターに分かれているので、見出しごとに区切っていきます。
Chapter3までは環境構築がメインなので飛ばしています。

# Chapter4 RSpec

[skipとpendingは何が違うのか?【RSpec】](https://qiita.com/nizi24/items/bddeca0379a4d11a5240)
# Chapter5 ビジュアルデザイ

元記事を表示

デプロイ後のテーブルの変更とデータベースのリセットについて

# はじめに
通っているプログラミングスクールで初めてのチーム開発を行いました。データベース設計については十分に検討したつもりでしたが、開発する中でカラム変更や本番環境のデータベースをリセットしたい!!と思うことがありました。そこで、自分の備忘録として記録を残そうと思います。
なお、デプロイ後のデータベースのリセットは本来あってはならないことであると思います。参考にされる方は、プログラミング初心者が書いた記事であることを忘れないで下さい。

# 開発環境
AWS EC2
Capistranoによる自動デプロイ
Capistrano Version: 3.14.0 (Rake Version: 13.0.1)
Rails 5.2.4.3
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin19]
mysql Ver 14.14 Distrib 5.6.47, for osx10.15 (x86_64) using EditLine wrapper

# 参考にさせていただいた記事
[【Rails】本番環境デプロイでよく使うコ

元記事を表示

なんでバリデーションかかってないの!?(unique:true編)

いやーね。
私本当にびっくらこきましたよ。
今ねrails5.2でフリマアプリ実装中なんですよ。:frowning2:
バリデーションみんなかけるよね?
うんわかってるよ。
みんなアタイとおんなじ気持ちだよね。:girl_tone2:
アタイわかってる。
まずね。
バリデーションはモデルとマイグレーションファイルどっちにも書いた方が良いみたいなんだけど、
今回はマイグレーションファイルの方に関してだから、モデルの方のバリデーションに関しては他の方の記事を参考にすると良いわ。

#1.最初に見て欲しいのはコレっ!
:writing_hand_tone1:

“`ruby:db/migrate/create_users.rb
class DeviseCreateUsers < ActiveRecord::Migration[5.2] def change create_table :users do |t| ## Database authenticatable t.string :first_name, null:false ,un

元記事を表示

Railsのenumについて

#はじめに
とある技術書を読んでいる最中に、`enum`という機能が突然出てきました。

簡単に使い方とかを調べたのでまとめようと思います。

#モデル作成

enum機能を使うためにモデルを作ります。

>“`sh
bin/rails g model Article status:integer
“`

#モデルの設定

`models/article.rb`にenumを定義していきます。

>“`ruby:models/article.rb
enum status: { draft: 0, published: 1 }
“`

#こんな風に使える

>“`ruby
article = Article.new(status: :draft)

>article.status
# ->draft
article.draft?
# ->true

>article.update(status: Article.statuses[‘published’])

>article.status
# ->published
“`

#参考
ほとんどここに書いてありました。
https

元記事を表示

RspecでRaiseエラーを確認する

いつも忘れるのでメモ

“`ruby
expect {
Users.update_age(params)
}.to raise_error(“サバ読んでたの?”)
“`

元記事を表示

[技術メモ]データベースのトランザクションとは

##トランザクションとは
データベースに対して行われるワンセットになった処理のまとまりのこと。

詳細はこちらが参考になりました!
https://qiita.com/komattio/items/838ea5df68eb076e8099

元記事を表示

Railsでエラー画面を作ろう

#Railsでエラー画面を作る

##エラーを捕捉する
Railsのコントローラにはrescue_fromメソッドというクラスメソッドがあり、
アクション内で発生した例外の処理方法を指定できます。
以下は500Error(WEBサーバーでのエラーを補足)

“`application_controller.rb
#StandardErrorが発生したらrescue500で処理を行う
rescue_from StandardError, with: :rescue500
“`

##アクションで処理を行う
実際に処理を行うのがこちらのrescue500メソッド
メソッドには引数を指定しそれにExceptionオブジェクトが入るようになっている。

renderのあとはERBテンプレートのパスを指定しています。
renderのstatusオプションはHTTPメソッドのステータスコードです。

“`application_controller.rb

private
#引数eを指定。errorオブジェクトが入る
def rescue500(e)
render “e

元記事を表示

validationのカスタマイズ

# 概要
個人アプリを作成していく中で、グループ登録が突如できなくなった事象が発生しました:scream:

原因は、usersモデルに追加したバリデーションでした:persevere:
(原因探るために、また一からアプリ作成し述べ4日間も費やしました。。。。)

備忘録として残します!

# エラー状況
### グループ登録画面
スクリーンショット 2020-06-08 17.43.29.png
今までできていたグループ登録ができなくなる事象が発生:zap:

### ログ
スクリーンショット 2020-06-08 17.44.13.pngパイプでつないでgrep?: Railsチュートリアル備忘録 – 8章

調べた内容を3分で振り返ることができるようにメモ

パイプ機能でコマンドをつなぐ?grep?
親切に”ターミナルの”と表記されているのがポイントでした

##演習内容
>ターミナルのパイプ機能を使ってrails routesの実行結果とgrepコマンドを繋ぐことで、Usersリソースに関するルーティングだけを表示させることができます。同様にして、Sessionsリソースに関する結果だけを表示させてみましょう。現在、いくつのSessionsリソースがあるでしょうか?
(Railsチュートリアル 第6版 8.1.1)

##パイプ?
`|`(パイプ)
わかりやすくて大好きです
コマンドの出力結果を次に渡す処理をする

##grep
ファイル中の文字列に対して正規表現を使って検索し表示するLinuxコマンド
(今回は理解した気になって進みます)

##使ってみる
`rails routes`を実行すると

“`
$ rails routes
Prefix Verb URI Pattern Controller#Action
root GET / static_pages#

元記事を表示

【Rails】Cloud Vision APIを用いて画像解析し、過激な画像を検知する方法

# 目標

`refile`でユーザーのプロフィール画像を編集した場合、
アップロードする画像を`Cloud Vision API`で画像解析し、
過激な画像の場合はDBに保存出来なくする。

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

# 前提

下記実装済み。

・[ログイン機能実装](https://qiita.com/matsubishi5/items/5bd8fdd45af955cf137d)
・[投稿機能実装](https://qiita.com/matsubishi5/items/1a5aeab651b5822d1f2c)

# `Cloud Vision API`を有効化

### 1.下記記事の「Geocoding APIを有効化」と同様の手順で、Cloud Vision APIを有効化して下さい。
[Geolocation APIを用いて緯度経度を算出する方法](https://qiita.com/matsubishi5/items/0

元記事を表示

【Rails】redirectとrenderの違いは?

## はじめに

redirectとrenderの違いって何だか分かりますか?
Rails初学者であれば意外と理解できていない人もいるかと思うので簡単に説明します。

## ズバリ違いはこれ

違いは何かというと、**コントローラを経由するかどうか**です。
それぞれ処理の流れを書いてみます。

■ redirect
リクエスト送信
→ ルーティングでコントローラとアクションを特定
→ 指定のコントローラ内のアクションが動作
→ 動作したアクションに対応するビューファイルがレスポンスとして表示される

■ render
指定のビューファイルを表示

## 使い分けは?

良く見かける例でいくと、投稿データを保存するという処理をする場合、保存に成功した場合はredirect、失敗した場合にはrenderを使うという使い分けになるかと思います。
コードの例を使って少し説明してみます。

“`ruby:post_controller
def new
@post = Post.new
end

def create
@post = Post.new(post_params)
if

元記事を表示

OTHERカテゴリの最新記事