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

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

【Ruby on Rails】指定した日の記録(投稿数)を非同期で検索する方法

#対象者

* 検索機能をransackなしで実装したい方
* 検索を非同期通信で行いたい方

#目的

* 非同期で検索結果を作成する

#実際の手順と実例
###1.前提

* Rails 5.2.5
* userコントローラーにsearchアクション加えることで実装
* 本(bookモデル)とUserモデルを実装済
* アソシエーション設定(ユーザー:本 = 1:N)
* 本の一覧ページに検索結果を表示

イメージこんな感じ

![スクリーンショット 2021-07-27 16.41.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1681213/64d932b6-5f25-15ee-830f-af46a15c4e31.png)

###2.Controllerとルーティングの設定

Userコントローラーに下記を追記します

““Users_controller.rb
#一部抜粋
def search
@user = User.find(params[:user_id]

元記事を表示

【Ruby on Rails】Gemの依存関係を監視させる ~ GitHub Dependabot ~

# 環境

Rails 6.1.4
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
Amazon Linux2
# Dependabotとは

Gem(パッケージ)の依存関係を更新してくれます!

具体的には…
1. Gem側でバージョン更新される(gem’otinu’1.22 から gem’otinu’1.3がリリースされる等)
1. DependabotがGemの更新を検知
1. 更新されたGemに関連するその他のGemも含め、確認をする
1. 確認後、更新された内容をGitHubのプルリクエストとして上げてくれる

数か月Gem放置して、あるときbundle叩いたらアプリが動かない…??
Gemのバージョン管理が大変だから今まで放置してしまってた!!

特にGemの入り組んだRailsは想像に難くないですね…。

そんな問題をDependabotは大幅に改善してくれます!

# 2種類のDependabot

**「Dependabotを知ったばかり」の方、必見**ですので前置きとしてご紹介します。

元記事を表示

ヘルパーメソッドのパスを知る!

# はじめに
本記事では、`form_with`についてまとめました。
本日、深掘りした内容になりますので、アウトプットいたします。

# ヘルパーメソッド
Railsにおける、主にビューでHTMLタグを出現させたり、
テキストを加工するために使用されるメソッドの総称です。
以下のようなものがあります。

|ヘルパーメソッド|使用用途|
|——|——|
|form_with|投稿ページなど、情報を送るためのフォームの実装|
|link_to|リンクの実装|

他にもたくさんのヘルパーメソッドがありますが、初めに学習するものは上の2つです。

## パスについて
パスの指定方法は、大きく分けて2種類あります。
①URL(URIやPrefixを記述する方法)
②modelオプション

### URL(URIやPrefixを記述する方法)
例えば、

“`erb
<%= link_to "編集する", edit_prototype_path(@prototype), class: :prototype__btn %>
“`

`edit_prototype_path(@p

元記事を表示

【Rails】多数のテーブルが存在する場合においてアソシエーションの一覧を取得する

## 概要

本記事は数百個のテーブルが存在するアプリケーションの開発をしている中で、あるモデルがどのモデルに対してアソシエーションの関係があるかを一覧で把握したいことがあった際に、アソシエーションの情報を一覧で取得できるコマンドを考えた際のメモになります。

## コマンド

Railsコンソールで実行

### has_many

“`ruby
hash = {}
tables = ActiveRecord::Base.connection.tables
tables.each do |table|
value = table.classify.constantize.reflect_on_all_associations(:has_many).map(&:name) rescue false
hash.store(table, value)
end
“`

### has_one

“`ruby
hash = {}
tables = ActiveRecord::Base.connection.tables
tables.each do |table|
value =

元記事を表示

Heroku 「 ▸ Couldn’t find that app.」というエラーが出てきた時の解決方法

今日は人に読ませるレベルではないかもです。
メモメモ。

VSChordにてherokuのデプロイを行っていたら、、、

“`perl:
$ Couldn’t find that app.
“`

というエラーがでてきた。
再度チャレンジしていると、どうも格闘しているアプリ名が違い。。。

は!と気づいた
先ほどheroku createで一度違う、アプリを作成してしまっていた。
そして、herokuのwebサイトから削除した間違えたアプリ名だ!

色々調べていくと

“`perl:
$ heroku git:remote -a [app name]
“`

でherokuの対象を変更して解決。

以上

元記事を表示

Ruby on Rails5 学習メモ

##最初に##
今まで、WebフレームワークとしてDjangoやSpringBoot、Bubble(ノーコード)などを経験していることを前提でRuby on Rails5を学んだ際の率直な感想は、シンプルでわかりやすいということです。DB操作などもRailsからとても簡単にできたり、文法はシンプルですが、独自のルールがあったり慣れればとても省エネでコードを書き進められます。
Railsの超入門を触っただけなので、まだRailsのことをそんなに知らないですが書いていて楽しいのは間違いないです。どんどん触って慣れようと思います。

学習メモとして以下を記します。(※説明がおかしい点あるかもです…)

##学習メモ

####コンソール系

**アプリ作成**

“`
rails new アプリ名
“`

rails new (アプリ名)でアプリ名のフォルダ作成が作成され、そのフォルダ内に開発に必要なフォルダやファイルなどが作成される。

:::note info
.gitも自動で作成される
:::

**サーバー起動**

“`
rails server
“`

Railsサーバ

元記事を表示

Herokuで月一回のバッチ処理を実装する方法

はじめに

月1回バッチ処理で、テーブルの特定カラムを更新したいと思い、gem「whenever」を使用して、バッチ処理を実装しようとしたものの、Herokuでは使用できなかったため、Heroku Schedulerを使用して、月一回のバッチ処理を実装しました。実装するにあたり、情報が少なかったため、同様の悩みをお持ちの方のお役に立てばと思い、記載いたします。

開発環境

– Mac
– Ruby 2.7.2
– Rails 6.1.3.1
– PostgreSQL 13.2

タスクの定義

Schedulerで実行したいタスクを定義します。`rails g task タスク名`コマンドでタスクを定義します。今回はタスク名を「reset_eat_day_month」としました。

“`:ターミナル
rails g task reset_eat_day_month
“`

成功すると、`lib/tasks`下にタスクが作成されます。私の場合、usersテーブルのeat_day_monthというカラムを0に更新したかったため、以下のタスクを定義致しました。

元記事を表示

【Ruby】単体テストコードのためのgem導入について

今回はテストコードを書くための3つのgemの導入について書いていきます。

RSpec,Faker,FactoryBotです。
RSpecはRuby on Railsのテストコードを書くために用いられるGemです。
Fakerはテストの際に用いるユーザー名やメールアドレスなどを、一定のルールに則り生成するGemです。
FactoryBotはインスタンスをまとめることができるGemです。Fakerと組み合わせて使うことができます。

最初は「コードは動けばそれでいいのでは?」みたいなことを考えていましたが、
今は品質を担保するためには必要な作業だと思っています。

さて導入の方法ですが、まず今作業しているアプリケーションのGemfileに移動し、

“`Gemfile
group :development, :test do
# Call ‘byebug’ anywhere in the code to stop execution and get a debugger console
gem ‘byebug’, platforms: [:mri, :mingw, :x64

元記事を表示

OwaspZapでログイン認証でInvalidAuthenticityTokenとなってしまう

# はじめに

やっとFireFoxでlocalhostにアクセスできるようになり、いざ作成しているサイトにログインしようとしたらなぜかエラーになりました。

しらべてみるとプロキシが大きく関係していそう。
記事に見当たらなかったので今回はまとめていきます。

# 問題

ログイン認証をしたときに以下のエラーが発生する。
![1628748494.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/82f3510d-8ea9-1608-97ba-edf5e0255a67.png)
また、パラメータはしっかりと送られていることを確認できた。

“`
{“authenticity_token”=>”***********”, “user”=>{…..
“`

プロキシ設定を解除するとログインが通るので、プロキシが悪さをしているようだった。

# 原因

Dockerのログを確認したところ以下のようなログが出力されていた。

“`
HTTP Origin header (https://l

元記事を表示

Railsにおける生成と巻き戻し(引用:Railsチュートリアル第3章)

##背景と具体例

どんなに気を配っていてもRailsアプリ開発中に何か失敗をすることは往々にしてある。Railsではそのような失敗をカバーする機能がいくつもあるので、まとめておく。

一般的なシナリオの1つとして、生成したコードを元に戻したい場合がある。例えばコントローラを生成した後で、もっといいコントローラ名を思い付き、生成したコードを削除したくなった、あるいは綴りを間違えたために修正したいといった場合がそれに当たる。

Railsはコントローラ以外にも関連ファイルを大量に生成するため、生成されたコントローラファイルを削除するだけでは十分ではない。自動生成されたコードを元に戻すためには、新規作成されたファイルを削除するだけでなく、既存のファイルに挿入されたコードも削除する必要がある。(`rails generate`を実行するとルーティングの`routes.rb`ファイルも自動的に変更される)

このようなとき、「generate」という言葉に因んで、`rails destroy`というコマンドを実行することで元に戻すことが可能。下記はその例。

###コントローラの場合

“`

元記事を表示

M1 Mac でRailsコマンドが使えなくなった時のメモ

M1 Mac で rbenv 経由で Ruby3.0.2 を入れたらrailsコマンドが以下のエラーで打てなくなった

“`terminal:terminal
$ rails s
-bash: /usr/local/bin/rails:/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby bad interpreter: No such file or directory

$ rails -v
-bash: /usr/local/bin/rails:/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby bad interpreter: No such file or directory
“`

“`
$ which rails
/usr/local/bin/rails

# 現状の環境確認
$ which ruby
/Users/takuya/.rbenv/shims/ruby
$ which gem
/Users/

元記事を表示

【Rails】LINEのように送ったメッセージがチャット画面の一番下に表示される方法

# はじめに
今回はLINEのように最新アイテムが一番下に追加されていくチャットのような画面で、
メッセージが追加されたら画面を自動で下までスクロールする方法について記述します。

記事をコピペしても使えるかと思います!

※前提でjQueryを使用しますので、そちらの導入をお願いいたします。
jQueryの導入:https://qiita.com/shunichfukui/items/d79f38a3af2715ffd218

# 開発環境
Ruby on Rails バージョン2.6.5

#実装方法
①メッセージを表示させたいビューにidとCSSにoverflow: scroll;(スクロールさせるCSS)を記述
(※私の場合はBootstrapを導入しているので、classでスクロール指定)

“` HTML:

  メッセージが表示されるエリア

“`

②jQueryを使用し、自動スクロールを設定(jsファイルに下記を記述)

“`JavaScrip

元記事を表示

エラーメッセージを日本語にする方法+

##環境
・Rails 6.1.3
##エラーメッセージを日本語にする方法
###1日本語に設定

“`config/application.rb
class Application < Rails::Application config.load_defaults 6.1 config.time_zone = 'Tokyo' config.active_record.default_timezone = :local config.i18n.default_locale = :ja config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s] end ``` ###2 rails-i18nのインストール ```Gemfile gem 'rails-i18n' ``` ###3config/localesの下にja.ymlを設置 ###4ja.ymlに日本語を設定するためのコードを書く ```config/locales/

元記事を表示

RailsでYoutubeLiveからリアルタイムでコメントを取得してみた

#内容
RailsでYoutubeの生放送からコメントを一定時間ごとに取得→フロントにレンダーする機能を実装

#google-api-clientについて
RailsにはGoogleの各種API用のGemが存在していますが、配信のコメントを取得しようとするとエラーが発生します。調べてみた所、どうも2021/08/11時点でYoutubeについてはアルファ版で([ソース](https://developers.google.cn/youtube/v3/libraries?hl=ja))、かなり開発の初期段階にあるようです。もしかしたらこれが原因かもしれませんので、代替として今回はリクエスト用のURIをRails標準ライブラリのnet/httpに渡して送信→リターンを得るという形を取ります。

[google-api-client公式リファレンス](https://developers.google.cn/youtube/v3/docs?hl=ja)
[net/httpリポジトリ](https://github.com/ruby/net-http)

##環境
– ruby 2.6.3

元記事を表示

AWS : ssh接続で手こずった(scpコマンド、iオプション)

## はじめに

railsアプリのインフラをAWS化させようと学習中。

教材に従ってssh接続(WEBサーバーからDBサーバーに)にする際に
linuxコマンドのscpが上手く使いこなせなかったので、メモに残す。

## 学習教材
`・さわって学ぶクラウドインフラAmazonWebServices基礎からのネットワーク&サーバー構築改訂3版`

ハマった章:`6-4 踏み台サーバーを経由してSSHで接続する`

## やりたい事

`DBサーバー(プライベートアドレス)へのssh接続を可能にするために`
`WEBサーバー(パブリックアドレス)`に`秘密鍵を格納しておく`必要がある。

必要手順

1、前章(6-3)以前で作成された秘密鍵をscpコマンドを使用して、
  WEBサーバー(パブリックアドレス)にコピーする。

2、コピーできたら、WEBサーバー(パブリックアドレス)にssh接続をして
  ファイル権限を所有者が読み取りだけできるよう設定する。

3、WEBサーバー(パブリックアドレス)に置いている秘密鍵を使って
  DBサーバー(プライベートアドレス)にssh接

元記事を表示

【Ruby on Rails】AWSの本番環境で起きたエラーをtailを使って確認する方法

#対象者

* 本番環境(デプロイ後)でエラーが発生している方
* Cloud9を使用して開発を進めている方

#目的

* cloud9から本番環境で起きたエラーの原因を突き止める

#実際の手順と実例
###1.logディレクトリに遷移する

まず、EC2からSSHでログインを実施します。
cloud9のターミナルから下記コマンド実行

““
$ ssh -i ~/.ssh/[pemファイル名] ec2-user@[IPアドレス]
““
[]の中身はそれぞれの状況によって変わると思います。
pemファイル名はキーペアの作成時にできたやつです!(うろ覚え)

その後、下記の順でlogでディレクトリまで移動します。

“`
$ cd アプリケーション名
$ cd log
“`

###2.エラー内容確認

lsコマンドで下記のファイルを見てみます

““
[ec2-user@ip-xxxxxxxx log]$ ls
development.log migrate:reset.log production.log puma-error.log puma.l

元記事を表示

[Rails]予約語一覧[h~m]

# はじめに
本記事では、Railsの予約語一覧を記述しています。
以下の記事の続きになります。

https://qiita.com/mkato1013/items/07194f6a799fa9acedac

# 予約語一覧(注意すべき単語を記述しています)
|頭文字|単語||||
|-|-|-|-|-|
|h|having|hold|host|hour|
||*「hour~」も多いです||||
|i|if|ignore|ilike|import|
||in|index|indexerror|infile||
||initialize|insert|int|int1|
||int2|int3|int4|int8||
||integer|into|io|is|
||isolation||||
|j|join||||
|k|key|keys|kill|||
|l|lag|language|large|last|
||layout|lead|leading|leave|
||left|less|level|like|
||limit|lines|link|ln|
||load|loader

元記事を表示

【Ruby】newした先のclassにinitializeが存在しない場合に考えること

## 背景
Railsのコードを読んでいて`<モジュール名>::<クラス名>.new`といったインスタンスが存在しており、該当するモジュールのファイルにジャンプした後、そのファイルのクラスに`initialize`メソッドが存在しなかったので疑問になり調べてみることにしました。

## 結論
結論としてはクラス内部で`include ActiveModel::Model`が呼ばれており、Ruby本体の`rails/activemodel/lib/active_model/model.rb`の`initialize`が呼ばれていることがわかりました。

“`ruby:rails/activemodel/lib/active_model/model.rb
# Initializes a new model with the given +params+.
#
# class Person
# include ActiveModel::Model
# attr_accessor :name, :age
# end

元記事を表示

【Rails】rails aborted! ActiveRecord::RecordNotFound: Couldn’t find User with ‘id’=0の対処法

症状

Railsでテストデータを作成しようとしたとき、下記エラーが発生してうまくデータが作成できませんでした。
どうやら、データベースにゼロ番目のデータが登録されていないにもかかわらず、ゼロ番目を参照しようとしているため、エラーが出ているようです。

“`terminal:エラー
rails aborted!
ActiveRecord::RecordNotFound: Couldn’t find User with ‘id’=0
“`

以下がseedのソースになります。

“`ruby:seed.rb
3.times do |n|
user = User.new(
first_name: “firstname#{n}”,
last_name,”lastname{n}”,
)
user.save!
end

3.times do |n|
user = User.find(n)

6.times do |m|
home = user.homes.build(
name:”na

元記事を表示

非公開のリソースにURLでアクセスされたらどうする?(例えば非公開記事とか)

# やりたいこと
投稿者が記事を投稿します。
投稿した記事は、公開/非公開(active/inactive)を設定できます。
読者側のページでは、公開記事を一覧で表示して(index)、各記事にアクセスできるようにします(show)。

読者側ページでは非公開記事は表示せず、遷移する動線を提示しないのは当然ですが、これをしただけでは、記事のURLからアクセスされたら非公開記事も見られてしまいます。

どうすれば良いでしょうか?

環境
ruby 2.7.2
Rails 6.1.3.1

投稿データを扱うこんなモデルがあったとします:point_down:
公開/非公開を制御するために、statusというカラムを持たせて、enumで定義します。

“`ruby:post.rb
# == Schema Information
#
# Table name: posts
#
# id :bigint not null, primary key
# title :text not null
#

元記事を表示

OTHERカテゴリの最新記事