- 1. 初めに
- 2. コントローラー
- 3. VIEW 検索結果表示画面
- 4. Sign up
- 5. 初めに
- 6. 環境変数を設定する
- 7. gemのインストール
- 8. .envファイル作成
- 8.1. ransackを複数ワード検索に対応させる
- 8.2. Rails ログイン機能
- 8.3. 【Rails】 N+1問題 (eager_loadとpreload)アプリで学べ
- 8.4. 【Rspec】時刻に関するテスト
- 8.5. 【Vue.js】エラーコードをcatch して条件分岐
- 8.6. 【Rails】アセットプリコンパイルされたファイルが保管される場所
- 8.7. 【Rails/Ruby/Docker/LINE messagingAPI/Heroku】単語帳bot
- 8.8. よく使うバリデーション (#コピペメモシリーズ)
- 8.9. 【Rails】Todoリスト カードの移動実装
- 8.10. [Rails]ransackを使った検索機能
- 8.11. [Ruby on rails] ”undefined method `each’ for nil:NilClass”エラーが出た時の対処法
- 9. エラー画面
- 10. 解決方法
[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 検索結果表示画面
“`
<%= paginate @【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| %>
<%= fRuby 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で読み込めるようにしてください。
方法をしましてはcogit 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でのトーク画面で、**問題、答えの登録**を可能にし、自作の**単語帳や問題集**として使用できます。
– **デモプレイ動画**
よく使うバリデーション (#コピペメモシリーズ)
# バリデーションとは
不正なデータがデータベースに保存されないようにデータをチェックするシステムをバリデーションという。
不正なデータの場合はデータベースに保存されない。# validates 書き方
モデルクラスにvalidatesメソッドを指定することで、バリデーションをかけることができる。(バリデーションはモデルで設定する。)
このときに、validatesを用いてカラム名と内容を指定する。## バリデーションの種類 一部分
###### # ・validates :カラム名, バリデーションしたい条件: 内容
###### # ・最大文字数:length: { maximum: 20 }
###### # ・最小文字数:length: { minimum: 20 }
###### # ・文字数の範囲:length: { in: 1..30 }
###### # ・空でない:presence: true
###### # ・他と被っていない:uniqueness: true
###### # ・正規表現:format: { with: /<正規表現>/}
#####【Rails】Todoリスト カードの移動実装
###はじめに
Todoリストアプリを作成するにあたって、カードの移動を実装してみたので
備忘録として記事を書く。### 使用環境
Rails 6.0.4′### カードの移動って?
![スクリーンショット 2021-08-03 12.02.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1183228/b4246afd-10b9-77bb-787c-c3e98e393792.png)
![スクリーンショット 2021-08-03 12.03.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1183228/0de770a3-b786-b711-0949-67a602b0bcd7.png)
![スクリーンショット 2021-08-03 12.03.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1183228/5bfc1[Rails]ransackを使った検索機能
今回は、`ransack`というgemを使った検索機能の解説をしていきたいと思います。
`ransack`を使うことで、検索機能をかんたんに実装することができます。
gemの素晴らしさを体感できる系ですねw#開発環境
> ruby 2.6.3
> Rails 5.2.6#前提
検索機能は、ユーザーの検索を例に出していくので、すでになんらかのアプリで、ユーザーが存在するものをご準備ください。
#手順
– gem ransackのインストール
– コントローラー
– ルーティング
– ビュー#gem ransackのインストール
まずは、gem ransackをインストールします。
“`Gemfile
gem ‘ransack’
“`を追加できたら
“`
$ bundle install
“`#コントローラー
ではさっそく、検索の処理をコントローラーに記述していきます。
ここでは、usersコントローラーにsearchアクションには、検索の処理を、indexアクションでは検索結果を取得しています。
“`controllers/users_
[Ruby on rails] ”undefined method `each’ for nil:NilClass”エラーが出た時の対処法
エラー画面
グループを作成後、一覧画面でグループ一覧を作成しようとしてたところ、
こんなエラーが出てきました。こういうエラーは大体スペルミスに原因があるのではないかと思います!
![スクリーンショット 2021-08-03 9.49.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/bacd570a-6c0c-5a9b-3fa0-3677aaa2fc45.png)
解決方法
コントローラー、モデルの記載を見直せど、スペルミスは見当たらず…
createコントローラーをよく見たのですが、わからず…
form_withでの送信がなんか、おかしいのかな~?と思ってみたら…ここでした!
“`
<%= form_with model: group, local: true do |f| %><%=f.label"勉強会名"%関連する記事
OTHERカテゴリの最新記事
- 2024.09.19
JavaScript関連のことを調べてみた
- 2024.09.19
JAVA関連のことを調べてみた
- 2024.09.19
iOS関連のことを調べてみた
- 2024.09.19
Rails関連のことを調べてみた
- 2024.09.19
Lambda関連のことを調べてみた
- 2024.09.19
Python関連のことを調べてみた