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

Rails関連のことを調べてみた2021年08月04日
目次

[Ruby on rails]検索結果でもページネーション使う kaminari

初めに

過去の検索機能実装の記事はこちら。

https://qiita.com/ki_87/items/eb6d4e440195c3b3c5a2

ページネーション導入済みで、一覧画面では使用してましたが、
検索結果では使わず、全表示にしていました・・・。
なので、今回検索結果の表示画面でもページネーションを使用していきたいと思います。

コントローラー

“`
class Users::SearchesController < ApplicationController def index users= User.search(params[:keyword]) @users=users.page(params[:page]).per(25) end end ``` これでほぼOKです!

VIEW 検索結果表示画面

“`

元記事を表示

【Ruby on Rails】autofocus: trueを使って自動で焦点をあてる方法

#対象者

* 投稿フォームを作ろうとしている方
* クリックしなくても自動で入力待機状態を作りたい方

#目的

* autofocus属性を使って、自動でカーソルをあわせられるようにする!

#実際の手順と実例
###1.autofocus属性とは??

* autofocus:trueでページを読み込んだ後、クリックすることなく、カーソルが移動して入力待機状態を作るというメソッド(?)です。

###2.具体例

本の投稿をするアプリを例とします。
入力は下記の通り

““app/views/devise/registrations/new.html.erb

Sign up

<%= form_with model: @user, url: user_registration_path, id: 'new_user', class: 'new_user', local: true do |f| %>


<%= f

元記事を表示

Ruby on Rails の link_toで使うnew_user_path の謎を解決します。

まずは答えから

“`
rails routes
“`
をした時に表示されるルーティングのPrifixに「_path」を付けたものです。「rails routes」コマンドで確認することができます。

“`
[— 例 —]
Prefix Verb URI Pattern Controller#Action
new_user_session GET /users/sign_in(.:format) devise/sessions#new
“`
この場合は「new_user_session_path」と指定した時のリンク先は「http\://ルートのURL/users/sign_in」になります。

#もう少し詳しく解説
Ruby on Railsのビューでよく使われるlink_toメソッドのリンク先の指定でよく使われる「new_user_path」ですが、初めて見た時はこれが何を意味しているのか全く分かりませんでした。

“`
link_to “ログ

元記事を表示

Railsで架空のCafeのHPを作ってみよう!【16日目】『colorboxのスクロール固定』編

#概要
基本Railsの記法に則り書いていきます!
1から全ての説明ではなく
その中であれ?どうやるの?と
疑問に思った点や実装に困った箇所を
ピックアップして紹介していきます♩

#設定と準備
・Rails
・HTML
・CSS
・Javascript(jQuery)

↑上記の言語とフレームワークを使い
架空(自分で考えたテキトーなもの)のCafeの
HPを作っていこうと思います!

#16日目の作業内容:round_pushpin:
・colorboxを導入しモーダルを作成

#16日目の気になった箇所:zap:
モーダルを作成できたのは良いが
スクロールすると一緒にスクロールされて
モーダルが見えなくなってしまうの固定したい!

#仮説:pushpin:
position: fixed;
などを使えば上手くいくのかな。

#結論:star:
調べてみたが理解するのが今の自分には非常に難しかったので
今回はどうすれば上手くいくのかだけの紹介になります。

どのような方法でも良いので
JSのファイルがモーダルを使っているHTMLで読み込めるようにしてください。
方法をしましてはco

元記事を表示

git push heroku masterで躓いた話

Rails を使ってサンプルアプリを作っていたときの話
ある程度の機能を付けたからherokuにデプロイしようとしたら….

“`
remote: !
remote: ! Precompiling assets failed. <- エラー remote: ! remote: ! Push rejected, failed to compile Ruby app. remote: remote: ! Push failed remote: Verifying deploy... remote: remote: ! Push rejected to <アプリ名>.
remote:
To https://git.heroku.com/<アプリ名>
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to ‘https://git.heroku.com/<アプリ名>
“`

今出ているエラーを見てみると

元記事を表示

【初見】ActiveRecord::InvalidForeignKey を初学者なりに噛み砕いて備忘録を記述してみる。

# タイトルにもあるとおり始めてのエラーです(多分)
Mysql2::Error: Cannot delete or update a parent row: a foreign key constraint fails とありまして、何が原因になっていたかを備忘録として書き残そうと思います。

#解決策から紹介します。
このエラーの解決は、モデルに追記した後に、データベースをリセットすることで、解決しました。
コードだけだと意味がわからない記述になっているの以下の説明も一緒に読んでください。

“`Ruby
# model/study_time.rb
belongs_to :skill, optional: true #optional: true を追記

# mdoel/skill.rb

has_many :study_time, foreign_key: :skill_id, dependent: :destroy #foreign_key: :skill_id, dependent: :destroy を追記

“`

# どういう仕組みで起こったのか。
作成しているア

元記事を表示

[Ruby on rails]グループ作成機能④ グループ管理者のグループ編集/グループ削除 外部キー制約のデータ削除

初めに

![スクリーンショット 2021-08-03 22.38.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/993e7291-1dbf-3631-afbb-96aa91cab457.png)

①②の記事でグループの作成、グループへの参加、退会機能を実装しました。
③ではグループ管理者の表示も行いました。

しかし、グループの編集/削除機能をすっかり忘れていましたので、今回グループの編集機能をつけていきます。

:sunny:注意①②と③④で作ってるアプリが違います。
①②は本の投稿(bookモデル)サイトでの、グループ作成機能。
③④は記事の投稿(postモデル)サイトでの、グループ作成機能です。
①②と③④でGroupのカラムが若干違います。
グループ名(name)、
グループ紹介(introduction)
オーナーid(owner_id)は共通ですが、
①②では、t.string :image_idがあるのに対し、
③④では、image_idが無く

元記事を表示

インスタンス変数とローカル変数の違い

# はじめに
本記事は、インスタンス変数とローカル変数の違いをまとめたものです。
正確な理解ができていなかったため、アウトプットします。

# 結論
いきなり結論ですが、
`スコープ`の違いです。

スコープとは、
ある変数や関数などの名前を参照できる`範囲`のこと。

### ローカル変数の範囲
ローカル変数は、極端に言いますと、
`定義した場所`でしか使えない。ということです。

例えば、def~endで定義したのであれば、その場所でしか使えない。
という認識です。

### インスタンス変数の範囲
インスタンス変数は、
`定義した場所以外でも使用可能`です。

例えば、def~endで定義していない場所、
コントローラー内で定義したのであれば、`ビュー`でも使用できる。
という認識です。

# 例文
コントローラーやビューなどを考慮せずに、
この文章内だけで考えた場合、
①と②、どちらが正しいだろうか。

“`ruby
def update
@tweet = Tweet.find(params[:id])

if @tweet.update(tweet_p

元記事を表示

[Ruby on rails] グループ作成機能⑥ Action mailerの環境変数化 gem(dotenv-rails) /.env

環境変数を設定する

グループ作成機能⑤でグループメンバーにメールを送信する機能を実装しました。
gmailのアドレス、パスワードを直打ちしてるので、セキュリティ的にあまりよろしくありません。
そこで使うのが環境変数です。

なんか大変そう・・・:frowning2:と思ってたのですが、すぐ出来ます!!!

もうメールの機能は出来上がってる前提です。
メール機能の実装については⑤の記事をご確認ください。

https://qiita.com/ki_87/items/67f8965e8de17e95ac1c

gemのインストール

“`perl:Gemfile
# 環境変数化のためのgem
gem ‘dotenv-rails
“`

そしたら“`bundle install“`で取り込みます。

.envファイル作成

Gemfileなどが置いてあるルートディレクトリに .env というファイルを作成します。
以下のような感じになるはずです!

![スクリーンショット 2021-08-03 21.17.30.

元記事を表示

ransackを複数ワード検索に対応させる

Railsアプリケーションで検索機能を実装しようと思った時によく採用されるgemが`Ransack`だと思います。
気軽に検索機能を実装出来ますが複数ワード検索に対応させるためには一工夫必要になります。

まずは通常の実装コードを以下に示します。

“`ruby:app/controllers/shops_controller.rb
class ShopsController < ApplicationController def index @q = params[:q] @shops = Shop.ransack(@q).result end end ``` ```slim:app/views/shops/_search_form.html.slim = search_form_for q, url: root_path do |f| = f.search_field :name_cont = f.button '検索', type: :submit ``` `search_field`で検索カラム(今回のケースだと`name`)と検索方法(

元記事を表示

Rails ログイン機能

##環境
Rails 6.1.3
Ruby 2.6.5
##ログインの仕組み
ログインページからメールアドレスやパスワードなどの情報をrailsに送信する。
送信された情報をもとに操作しているユーザを特定し、ログイン状態とする。

“`routes.rb
get “login”=>”users#login_form”/login_formアクションをlocalhost:3000/loginで読み出し
“`
“`users_controller.rb
def login
@user=User.find_by(
email: params[:email]
password: params[:password])
end
“`
フォームから入力されたemail,passwordから該当するユーザーを取得
userテーブルから入力された値に一致するユーザーを取得し、変数@userに代入

元記事を表示

【Rails】 N+1問題 (eager_loadとpreload)アプリで学べ

##はじめに
最近SQLの知識がついてきたので、N+1問題を改めて勉強。
そしたらまだまだわかっていない箇所があったので、アウトプットしていく。
アウトプットのやり方は 教材アプリで実施(下記URL参照)
実際に手を動かして知識の定着をはかる

https://www.techpit.jp/courses/79/curriculums/82/sections/623/parts/2162

僕らがスクールで扱っていたデータ数なんて毛みたいなものなので、今回は700近いデータ数で実施。
データ数多いので、表示スピードにもろ影響することがわかる。

### 対策メソッド

![スクリーンショット 2021-08-03 15.37.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1183228/13dbfa6c-5228-9138-d154-7449df90ccfd.png)

詳細はいっぱい記事があるので、割愛します。
下記2つの記事がわかりやすかったので見て下さい。

https://qiita.co

元記事を表示

【Rspec】時刻に関するテスト

## はじめに
あるユーザーのログイン履歴一覧を取得するAPIを作成した際のテストにて、時刻の扱い方で躓いたため整理しておきます。

### 前提
ユーザー(accounts)テーブルと、そのログイン履歴(logins)テーブルがある時。

## やりたいこと
以下のようなデータを作成。

“`ruby
let(:login1_created_at) { 4.day.ago }

let!(:login1) { create(:login, account: account, created_at: login1_created_at) }
“`

この状態で`subject`を走らせ、`created_at`の値が一致することをテストしたい。

## 困ったこと
`response`で返ってきた`accountのcreated_at`と、`let!`で作成した`accountのcreated_at`が一致しない。

## 原因
これはRubyのTimeオブジェクトの仕様で`created_at`にて作成したデータはミリ秒まで含んでしまうためです。

ちなみに以下のコードで検証す

元記事を表示

【Vue.js】エラーコードをcatch して条件分岐

## はじめに
APIを叩き、例外が発生した際にcatchでエラーコードを取得する方法についてです。

今回は、取得するエラーコードによって表示するエラーメッセージを変える必要があり、catchでのエラーコード確認方法が分からなかったため、備忘録として残しておきます。

## 実装のゴール
### エラーコードにより表示するメッセージを切り替える

– emailが重複している場合
エラーコード: `record_invalid`
メッセージ: `このメールアドレスはすでに登録されています。別のメールアドレスをご利用下さい。`

– 既に同じユーザーが登録されている場合
エラーコード: `already_exist_error`
メッセージ: `既に登録されています。`

### 前提
– email重複時はバリデーションエラーが返る
– 同じユーザーが存在している場合には、API側で任意の例外を発生させている

“`ruby
class
class AlreadyExistError < BadRequestError; end def create

元記事を表示

【Rails】アセットプリコンパイルされたファイルが保管される場所

Production環境ではデプロイ時にアセットプリコンパイルによって、
images、javascripts、stylesheets類がアセットプリコンパイルされる。

プリコンパイルされたファイル群は
**`public/assets`** 配下に保管される。

元記事を表示

【Rails/Ruby/Docker/LINE messagingAPI/Heroku】単語帳bot

## 1.はじめに
初めまして、小林凌(こばやし りょう)と申します。

現在、バックエンドエンジニアへの転職を目指し、転職活動中です。

当記事は、**LINE messagingAPI**を活用したアプリケーションの開発の流れをまとめた記事になります。

LINE messagingAPIを活用して、開発したい方の参考になればと思います。

## 開発アプリ

まず私が開発したアプリについて紹介します。

– アプリ名 「単語帳bot」
– 公式LINEなので下記QRコードから友達登録できます。

![スクリーンショット 2021-07-26 12.00.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1536072/8eaaac60-60b7-ceaf-238b-eb320d7cd92d.png)

LINEでのトーク画面で、**問題、答えの登録**を可能にし、自作の**単語帳や問題集**として使用できます。

– **デモプレイ動画**