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

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

ActionMailerでUserモデルの属性がnilになってしまう問題

# 実行環境
– Rails 6.0.1

# やろうとしていたこと

#### ユーザーの新規作成時にメールを送信

“`app/controllers/users_controller.rb
class UsersController < ApplicationController def create @user = User.new(user_params) if @user.save UserMailer.activation(@user).deliver_later redirect_to root_url else render "new" end end end ``` #### ユーザーオブジェクトを渡して ``` app/mailers/user_mailer.rb class UserMailer < ApplicationMailer def activation(user) @user = user mail(to: @user.email, subject

元記事を表示

rails-tutorial第10章

###modelだけ単数形の理由
modelは型に当たるので、それが複数形というのはちょっとということらしい。

#edit updateアクションを実装しよう

###まずはeditアクションをコントローラに実装

“`app/controllers/users_controller.rb
class UsersController < ApplicationController def show @user = User.find(params[:id]) end def new @user = User.new end def create @user = User.new(user_params) if @user.save log_in @user flash[:success] = "Welcome to the Sample App!" redirect_to @user else render 'new' end end def edit

元記事を表示

rails-tutorial第9章

###8章補足。
sessionを変数と考えていたが、正確には
sessionメソッドを使うと、ユーザーIDなどをブラウザに一時的に保存できるということである。

#発展的なログイン機構

sessionだけを使ったログインだとサーバーやブラウザを閉じてしまうと、またログインが必要となる。そこを改善できないものだろうか。

ベターなのは、ユーザーの意思で、期限のあるセッションか、永続的なセッションかを選べるようにするといい。

###cookiesとsessionの違い。

###超わかりやすい説明。

cookiesは診察券、session idは整理番号と考えるとわかりやすい。
cookiesはクライアント側に保存されるので、その情報から、以前何を買ったとかショッピングカートに入れたとかがわかる。

session idもcookieに保存されるのだが、session idはブラウザとサーバーの通信状態を呼ぶから、
別のページに移動したり、別のデバイスから入ろうとすると、その時点でsession idはsessionというハッシュから削除されてしまう。

なので、たとえcook

元記事を表示

rails-tutorial第8章

#ログイン機能を作ろう!!

モデルを使わないSessionリソースを扱う。

###Sessionsコントローラを作ろう

$ rails generate controller Sessions new

###ルーティング設定

“`config/routes.rb
Rails.application.routes.draw do
root ‘static_pages#home’
get ‘/help’, to: ‘static_pages#help’
get ‘/about’, to: ‘static_pages#about’
get ‘/contact’, to: ‘static_pages#contact’
get ‘/signup’, to: ‘users#new’
get ‘/login’, to: ‘sessions#new’
post ‘/login’, to: ‘sessions#create’
delete ‘/logout’, to: ‘sessions#destro

元記事を表示

【Rails】seedで初期データ作成

# seedで初期データ作成

### 目次
1. 初期データ作成にあたって
2. seedファイル作成

## 1. 初期データ作成にあたって
ユーザー機能に管理者権限を追加することになりました。
管理者ユーザーを作成するため、私は “`rails c“` から管理者ユーザーの作成を行いました。
他の開発メンバーにも、管理者ユーザーの作成を行ってもらいたいのですが、 “`rails c“` から各々、作成するとなると手間になったり、忘れてしまう可能性を考慮し、seedファイルを作成して管理者ユーザーを作成してもらうことにしました。

## 2. seedファイル作成
今回は管理者ユーザーのデータを作成します。
“`db“` 以下に “`db/seeds/admin_user.rb“` を作成します。
以下のようにseedファイルを作成します。

“`db/seeds/admin_user.rb
User.create(admin: 1, email: “admin@admin.jp”, password: “123456”)
“`

ターミナルで以下のコマンドを入

元記事を表示

Docker+Rails コンテナ内でrails console

## 環境
macOS Catalina 10.15.4
Docker Version 19.03.8
Ruby on Rails 4.0.0

6月から本格的にRails案件に入っているのですが、レガシーコード混じりで悪戦苦闘している人です。元々フロントエンドで、前回記事を書いた5/30時点で「hamlって何?」っていう状態からスタートしたわけですが、なんとか今週1週間を耐え抜きました。
いや、耐え抜いていないかもしれません。

そんな私ですが、Docker環境でコンテナ内でrails consoleする方法を書きます。
ちなみにDocker開発環境自体は、docker-sync-stack startを使っていて、Dockerコンテナにマウント→即時編集反映されていました。
[docker-syncでホスト-コンテナ間を爆速で同期する](https://qiita.com/pocari/items/0340049742927f3a94b7)

## すること
1:container内に入る
2:containerでrails consoleする
これだけ。

### 1:conta

元記事を表示

【Tips】 assign_attributes は association を更新する!?

form object を触っていた時に不思議な挙動に出会いました。

周知の通り、入力値を validation で弾いた時は、DB は更新されません。

しかし、 association だけは更新されてしまいます。

普段は、#update が**トランザクション**の中で [#assign_attributes, #valid, #save] の更新処理を一括で担ってくれていたことに気づかされました。

もし、#update を使用しない場合の解決策としては、[rails の issue](https://github.com/rails/rails/issues/17368#issuecomment-411725867)にあるように個別にトランザクションを張ると解決されるでしょう。


– 開発環境
– Ruby: 2.4.9
– Rails: 5.1.2
– references
– [Updating associations with assign\_attributes should not persist · Issue \#17368 · rai

元記事を表示

VScodeでpryと打つとbinding.pryに変換してくれる設定

##はじめに
Railsで開発していると必ず使うであろうデバッグ(binding.pry)をVScodeで簡単に出せる方法を紹介します。

##設定
###1 VScode上でcommand +shift + P → Configure User Snippetsを選択
スクリーンショット 2020-06-06 20.37.56.png

###2 ruby.jsonを選択
スクリーンショット 2020-06-06 20.38.56.png

元記事を表示

rails new のオプションコマンド

## コマンドを打つときに毎回不安になるので、Rails newのオプションをまとめてみた!!

### カレントディレクトリにディレクトリとアプリを作成する
“`
$ bundle exec rails new アプリ名
“`
### カレントディレクトリにRailsアプリを作成する
“`
$ bundle exec rails new .
“`

### データーベースを指定する
“`
$ bundle exec rails new . -d mysql (postgresでもOK!!、デフォルトはSqlite3)
“`

### Bundle install をスキップさせる
“`
$ bundle exec rails new . -d posgresql –skip-bundle
$ bundle exec rails new . -d postgresql -B でも可能
“`

### test unit をスキップさせる
“`
$ bundle exec rails new . -d mysql –skip-test-unit
“`

以上です

元記事を表示

【Rails6+Bootstrap/1000%時短】画像をhoverすると自動ドアのようにスーッと投稿内容が現れるCSSアニメーション実装+美しいレイアウト

[スクリーンショット 2020-06-06 18.26.55.png]
(https://www.twinzlabo.com/category/%e5%ae%9f%e8%a3%85%e9%96%a2%e9%80%a3/html-css/)

# 環境
ruby 2.6.4

Rails 6.0.2.2

rbenv 1.1.2

bootstrap 4.3.1

# Bootstrap4の導入
## ①bootstrap 4.3.1を追加するためにyarnをinstall
“`
$ yarn add bootstrap@4.3.1 jquery popper.js
“`
## ②app/javascript/packs/application.jsに下記コードを追加

“`app/javascript/pac

元記事を表示

[技術メモ]HTTPリクエストの中身を構成する3つのパート

「HTTPリクエスト行」、「HTTPリクエストヘッダー」、「HTTPリクエストボディ」の3つです。

詳細は下記ページが参考になります!
↓ ↓ ↓
https://webtan.impress.co.jp/e/2010/01/12/7156

元記事を表示

[技術メモ]ステータスコードについて

##ステータスコードとは
ブラウザのリクエストに対する、サーバーのレスポンスのことです。
サーバはこのレスポンスを、3桁の数字で返します。
この数字のことを「HTTPステータスコード」と言います。
各番号にはそれぞれ意味があり、受信した番号に応じてブラウザの処理が変わります。

下記サイトより引用
https://sem-journal.com/other/status-code/

コード一覧の内容もサイトで確認出来ます。

個人的には、やっぱり「404 Not Found」が身近ですね!
鯖落ち!

元記事を表示

Rails 5.2/6.0 DEPRECATION WARNING: Dangerous query method / orderとpluckのサニタイズ

Rails 5.2以降では、クエリーメソッドのorderやpluckに文字列でSQLを渡すと警告が出ることがあります。

“`
DEPRECATION WARNING: Dangerous query method (method whose arguments are used as raw SQL) called with non-attribute argument(s): 略
“`

Rails 5.2ではメッセージの続きに次の文句がありますが、6.0ではまだ禁止されていません。

“`
Non-attribute arguments will be disallowed in Rails 6.0.
“`

Rails 6.0では次のように出るので、6.1で禁止されるのかな。

“`
Non-attribute arguments will be disallowed in Rails 6.1.
“`

Rails 5.2でorderやpluckの引数をチェックしている箇所は次のコードです。

https://github.com/rails/rails/blob/

元記事を表示

【Rails】いいね機能の実装

## 始めに
忘れるといけないので、deviseと合わせたいいね機能の実装を簡単にまとめました。

## 前提 
環境
 Rails 5.2系
 Ruby 2.6系

使用ライブラリ
 devise
 Slim

## 実装

### 1.Railsアプリの作成

“`
$ cd
$ rails new favorite_function
$ cd favorite_function
“`

### 2.gem deviseとSlim導入

“`ruby:Gemfile

gem ‘slim-rails’ #Slimのジェネレータを提供
gem ‘html2slim’ #ERB形式のファイルをslim形式に変換してくれる
gem ‘devise’
“`

“`
$ bundle
“`

### 3.deviseをインストール

“`
$ rails g devise:install
create config/initializers/devise.rb
create config/locales/devise.en.yml
=

元記事を表示

[技術メモ]ブラウザにURLを打ち込んでサイトが表示されるまでの仕組み

初めに、DNSサーバにアクセスし、WebサイトのIPアドレスを特定します。
次に、そのIPアドレスを持つサーバーに対してhttpリクエストを送信します。

サーバーがそのhttpリクエストを元にクライアントの要求を承認すると、
サーバーはクライアントに“200 OK”というメッセージを返します。

承認が行われるとサーバーからWebサイトの情報がデータパケットという形で
転送されてクライアント側に表示されるという仕組みです。

自分は、下記の動画の図解がとてもわかりやすかったです!

元記事を表示

[技術メモ] クッキーとセッションの違い

主にステートフル(※)な通信を実現するためにそれぞれ利用されます。

※ステートフルとは
システムが現在の状態を表すデータなどを保持しており、その内容を処理に反映させる方式。
同じ入力に対する出力が常に同じとは限らず、内部の状態次第で変わることがある。

##クッキー
サーバーからクライアント側に付与する情報(セッションID)の仕組み

##セッション
サーバー側に保存される一連の操作や通信のこと

詳しくはこちら
↓ ↓ ↓

元記事を表示

includeメソッド

#includeメソッド

Railsのincludesは、関連している複数のテーブルからデータを取得してくるときのアクセス回数を大きく減らすことができるメソッド。

“`ruby.rb
@events = @events.includes(:member)
“`

includesメソッドに対して関連づけの名前を与えると実際のクエリの直後に関連づけられた
モデルオブジェクトを一括して取得するクエリが発行。
上記の例であれば:memberオブジェクトを一括して取得するクエリを発行してくれる。

発行されるsqlを見てみると…

“`sql
SELECT “staff_members”.*FROM “staff_members”
WHERE “staff_members”.”id” IN (1,2,3,4,5)
“`

というようなsqlが発行される。
つまり一件一件selectするのではなくwhere句を使って
一括でSQLを発行することでN+1問題を解決してくれる便利なメソッド。

元記事を表示

[Rails] devise を利用 ゲストユーザー機能( ポートフォリオ 用)

初めに

ポートフォリオ用のWebサイトには必須と言われるゲストユーザーログイン機能。
deviseを使用したゲストログイン機能について紹介します。
前提として

deviseの導入が完了している事
以下が参考記事となります。
・ https://qiita.com/ShinyaKato/items/a098a741a142616a753e

ゲストログイン機能の実施

“`config.routes.rb
# 以下を追加
devise_for :users, :controllers => {
registrations: ‘users/registrations’,
sessions: ‘users/sessions’
}

devise_scope :user do
post ‘users/guest_sign_in’, to: ‘users/sessions#new_guest’
end
“`
“`app.controllers.users.sessions.controller.rb

#以下を追加
def new_g

元記事を表示

[初心者]Ruby on Rails のテストフレームワーク Rspec の導入

## Ruby でのテストフレームワークと Rspec について
Rubyのテストフレームワークで有名なものは
– Rspec
– Test::Unit
– Cucumber
などがあります。この中で Rspec は一番使われているBDDテストフレームワークです。

## テストの種類

Rails チュートリアルではいくつかの種類のテスト使われています。

モデルやビューヘルパー単体の動作をチェックする単体テスト、コントローラー/ビューの呼び出し結果をチェックする機能テスト、ユーザーの実際の操作を想定し、複数のコントローラーにまたがるアプリの挙動をチェックする統合テストがあり、システム開発では以上のテストを行うことが多いです。

## 導入
Gemfile に rspec に関する gem を入れます

“`
group :development, :test do
gem ‘rspec-rails’
end
“`
必要に応じて、[FactoryBot](https://github.com/thoughtbot/factory_bot/blob/master/GE

元記事を表示

rails devise(sign_in時)でreCAPTCHA V3の実装

初めてQiitaに投稿します!
軽〜い気持ちで投稿しています。
間違い等あれば、優しく指摘していただければ幸いです!

# reCAPTCHAとは?
googleが提供しているAPIの一つで、人間が操作しているかどうかを確認するためのものです。
会員登録やログイン時に「私はロボットではありません」とこのような表示を見た事があると思います。
チェックするだけで済んだり、その後画像認証が出た場合車とか信号機とか横断歩道とかとかチェックした経験があるかと思います。あれです。
![c92f501bfd292e7a5ceb955675e35aee.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606335/6ea0faa6-dab7-0176-743b-9db30949c2ca.png)

reCAPTCHAは大きく分けてV1,V2,V3の3種類があります。(V2の中にはInvisibleもあります)
今回はV3の実装です。

# reCAPTCHA V3の特徴と導入メリット
reCAPTCHAのAIが、

元記事を表示

OTHERカテゴリの最新記事