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

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

ブラウザを終了してもsessionを維持する方法

## ユースケース
Deviseでtimeoutableのモジュールを導入しつつ、ブラウザを終了してもセッションを維持したいユーザ
## 方法
### 1 セッションのタイムアウト時間を設定する
“`config/initializers/devise.rb
# コメントアウトを解除し、何分でタイムアウトになるのかを設定する
config.timeout_in = 30.minutes
“`
### 2 Deviseを設定しているモデルを修正
“`app/models/user.rb
class User < ApplicationRecord devise :database_authenticatable, :registerable, :trackable, :recoverable, :timeoutable # <= 追加 end ``` ### 3 session_keyを特定 ``` $ Rails.application.config.session_options[:key] => “_qiita_session”
“`

### 4

元記事を表示

【RailsAPI】AbstractController::DoubleRenderErrorの対処法

症状

RailsAPIモードで、条件でrenderするものを変えるアクションを作成時に、以下のエラーが発生しました。
翻訳すると、「このアクションでは、レンダリングおよび/またはリダイレクトが複数回呼び出されました。ご注意ください」

“`terminal:error
AbstractController::DoubleRenderError (Render and/or redirect were called multiple times in this action. Please note that you
may only call render OR redirect, and at most once per action.
Also note that neither redirect nor render terminate execution
of the action, so if you want to exit an action after redirecting, you need to do something like “re

元記事を表示

「heroku run rails db:migrate」コマンドとは・・・

##環境
– Ruby 2.6.5
– Rails 6.1.4.1

##調査の背景・目的
Herokuのデプロイ時のエラー文「We’re sorry, but something went wrong.」が出た際の対処法で、「heroku run rails db:migrate」コマンドを入力すると解消された。コマンドの詳細について記載する。

##そもそもmigrationとは・・・
– データベースの構造(テーブル、カラム)を変更するときに利用する機能

##migrationファイルとは・・・
– データベースを生成する際の設計図

##「rails db:migrate」コマンドで何をする?
– migrationファイルの内容をデータベースに反映する

##「heroku run rails db:migrate」コマンドで何をする?
– migrationファイルの内容を**herokuサーバのデータベース**に反映する

以上

元記事を表示

【Rails】定数の定義方法【上書きトラブル注意】freeze

皆さんは、定数ってよく使いますか?

「Rails」も別の言語と同様で、
どこか専用の場所に定義して使うんだろうなー…ってフワッとした認識だったのですが、調べてみると色々注意点が出てきました。

Railsの定数っていうのは「定数=定まった変数」と言いながら、
実はプログラム内で値を書き換えることが可能なのですね。

チーム開発においては、その辺特にバグの原因にもなり得る箇所かなーなんて思うので、
ぜひ皆さんの今後の開発トラブル回避に繋がるなら幸いだなーと思います!

注意点の前に、
まず、Railsの定数の定義方法について3つ共有します!

# 定数を定義する方法①【カンタン】

一番カンタンな方法がこちら。
「config/initializers/constants.rb」ファイルに定数を定義する方法です。これが、アプリケーションのどこからでも定数を呼び出せる一番カンタンな方法でした。

“`config/initializers/constants.rb
module Hoge
FUGA = [“これは定数です”]
end

p Hoge::FUGA
# => “これ

元記事を表示

【未経験開発 Rails/React(TypeScript)/AWS/Docker/CircleCI】モダンな技術でポートフォリオを作成する方法

# 0. はじめに
モダンな自社開発企業でよく用いられている技術(Rails, React(TypeScript), AWS, Docker, CircleCI)を使用してポートフォリオを作成しました。
本記事のターゲットやコンテンツは以下のとおりです。

## ターゲット: 誰に対する記事か
– 未経験でエンジニア転職するために、プログラミング学習をしている方。
– 未経験でエンジニア転職するために、ポートフォリオを作成しようとしている方。

## コンテンツ: 何がわかるか
– 最終的にどの程度学習すればいいのかの全体感。
– Rails, React(TypeScript), AWS, Docker, CircleCIを使ったポートフォリオの作成方法の概要。

# 1. 概要
## 1.1 サービス概要
人と人との繋がりのあるべき姿を実現する、半匿名型SNSです。
Twitterと似ていますが、以下の2点で異なります。
1. フォロワーの投稿が匿名化されるため、誰によって投稿されたかわからない。
2. 週に1度、投稿を1つだけ匿名化解除できる。
これらの機能により、自由な発信と、

元記事を表示

【Rails】production環境でCSS等が反映されないとき(ActionController::RoutingError (No route matches [GET] ….

## 環境
Ruby 3.0.2
Rails 6.1

## 問題
CSSなどをプリコンパイルの対象に指定し,コンパイル実行後にproduction環境にてページを表示してみたらCSS等の設定が全く反映されていなかった.また,ログ(`log/production.log`)を確認してみると

“`
ActionController::RoutingError (No route matches [GET] “/assets/ … .css”):
“`

のようなメッセージが残っていた.

## 解決方法
まず,コンパイルするときに環境を指定していなかったのが問題だった.以下のように,環境を指定してコンパイルをする.

“`sh
$ RAILS_ENV=production bundle exec rails assets:precompile
“`

なお,`bundle exec rails`の部分は環境構築のしかたによって適宜変えて実行すべきところだろう.

次に,`config/environments/production.rb`を開き,`config.publi

元記事を表示

Ruby の自己代入演算子 ||= について

“`
test ||= 200
“`

この謎の記号  `||= ` についてまとめてみました

##結論

“`
test ||= 200
“`

`test = test || 200`の省略形
変数testが存在しない(nil または false)場合、変数testに200を代入する
と言う意味になります

##具体例

“`
#変数testに値を代入していない場合(変数の中身がnilまたはfalse)
test ||= 200
=> 200

#変数testに値を代入している場合(変数の中身がtrue)
test = 10
test ||= 200
=> 10
“`

変数の中身が

– nilまたは、false → 右辺の値(200)を変数に代入する
– true → 左辺の変数に代入されている値(10)を返す

irbを用いることで自分で調べることもできます
![qiiita.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/893750/7f706866-671e-6f2

元記事を表示

[Rails]データベースへのアクセス負荷を軽減するために気をつけるべきこと 「3行で要約」

#3点にまとめる
“`
テーブルを正規化する
シンプルなSQLを心がけ
インデックスの張り忘れ、もしくは不正
“`
##テーブルの正規化とは
“`
データの冗長性を排除し、一貫性や効率性を保持するようなデータ形式になる形でテーブルを定義すること。
“`
##SQLとは
[SQLとは](https://hnavi.co.jp/knowledge/blog/sql/)
##インデックスとは
“`
「テーブルとは別に検索ように最適化された状態のデータ」
“`
##終わりに
アップデートしていきます。

元記事を表示

rails7から追加された`compact_blank`について

# 概要

例えば、Arrayにnilが入りうる可能性がある場合にnilを取り除きたいケースがあった場合に最小の行動で表すと`reject(&:blank?)`を使っていたがその処理のショートハンドができました。

“`ruby
> [1, 2, 3, nil].reject(&:blank?)
=> [1, 2, 3]

> [1,2,3,nil].compact_blank
=> [1, 2, 3]
“`

# 追加されたPR
https://github.com/rails/rails/pull/36412

元記事を表示

【Rails】scaffoldについて【簡単なアプリケーションがすぐに作れる】

## はじめに
 本記事は、プログラミングの学習を始めて1ヶ月の初学者が、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
 そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
 間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。

## 今回の疑問点
 今回の疑問点は、

  _scaffoldについて_
 
 です。 

## 疑問点についての解説

###結論
ターミナルで`rails g scaffold モデル名 カラム名①:データの型① …`を実行することでアプリケーションの雛形を作成することができる。

###使い方の流れ

まず、ターミナルで以下のコマンドを実行し、sample_appを作成する。

““
rails new sample_app
“`

アプリケーションが作成できたら以下のコマンドでsample_appディレクトリへ移動する。

“`
cd sample_app
“`
移動ができたら以下の通り入力。

“`
rails g scaffold Comment t

元記事を表示

【Rails】一定期間でログファイルを削除【手動は卒業】

開発中ってログの容量食いますよね…。
みなさんは、どうしてますでしょうか?

適当なタイミングで削除はしてるのでしょうか?

実のところ私は、開発の際は、pryの方を使うことが多く、正直
ログに関してあまり理解していなかったんですよね…。

ただ、これを機に色々調査してみたので共有いたします!

# rails:ログを削除するコマンド
“`
$ rake log:clear
“`

コンソールで、上記コマンドを実行すればログファイルが消えるかと思います。

ただ、毎回毎回手動で削除するのってかなり面倒ですよね?
そこで、何かいい方法がないか調べてみました。

# ログローテーションとは?
>ログローテーションとは、システムが残す時系列の記録データ(ログ)が際限なく増えることを防ぐために、一定の容量や期間ごとに古いログを削除したり新しいログで上書きすること。また、そのような機能。
[IT用語辞典 e-Words](https://e-words.jp/w/%E3%83%AD%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%86%E3%83%BC%E3%82%

元記事を表示

【Tips】Ruby on Rails 開発

### circleci
>https://hanachin.hateblo.jp/entry/2019/07/10/010613
bundle exec rspec –failure-exit-code=0
bundle exec rspec –only-failures

テストの通過率を上げる

### その他
>https://lgtmoon.herokuapp.com/

LGTMジェネレーター

元記事を表示

Railsのインスタンスメソッドとクラスメソッドの違い

## 概要
Ruby on Railsにおいて__インスタンスメソッド__と__クラスメソッド__についての知識が曖昧だったため
備忘録としてアウトプットします。

## インスタンスメソッドとは
####結論
インスタンスメソッドとは、あるクラスから生成されたインスタンスに対して呼び出すことのできるメソッドです。
#### 使用用途例
例えば、Userクラスにおいて生成されたuserが成年か未成年かを判定したい場合など。
#### コード例

“`ruby
class User
def adult # インスタンスメソッド
self.age >= 20 ? ‘成人’ : ‘未成年’ # 20歳以上なら’adult’, 20歳未満なら’child’を返す処理
end
end

user = User.new(name: ‘田中’, age: 23)
user.adult #=> ‘成人’
“`

## クラスメソッドとは
#### 結論
クラスメソッドとは、クラス全体に対して何か処理を行う場合に使用するメソッドです。
#### 使用用途例
例えば、Userクラ

元記事を表示

【Ruby】自己代入演算子「||=」

“`ruby
hoge ||= 5
“`

「||」演算子の自己代入演算子。**hogeが偽か未定義ならhogeに5を代入する。**
わかりやすく書き直すと↓

“`ruby
hoge = hoge || 5
“`

hogeが**false,nil以外** → 5を返す
hogeが**false** → hogeに5を代入する
hogeが**nil(未定義)** → hogeに5を代入する

##参考

https://docs.ruby-lang.org/ja/latest/doc/spec=2foperator.html#selfassign

元記事を表示

rails7で`to_s`の引数にシンボルでフォーマットを指定するとDEPRECATION WARNINGが発生する(`DEPRECATION WARNING: Integer#to_s(:currency) is deprecated. Please use Integer#to_formatted_s(:currency) instead.`)理由と対応

# 概要

rails7で`1000.to_s(:currency)`の様に、`to_s`の引数にシンボルでフォーマットを指定するとDEPRECATION WARNINGが発生するようになりました。

“`ruby
DEPRECATION WARNING: Integer#to_s(:currency) is deprecated. Please use Integer#to_formatted_s(:currency) instead.
“`

この変更はこちらのPRで追加されています。

https://github.com/rails/rails/pull/43772

# 理由
ruby3.1で`symbol`, `true`, `false`, `nil`, `0-9`への`to_s`メソッド使用時のパフォーマンスチューニングが行われました。

https://github.com/ruby/ruby/commit/b08dacfea39ad8da3f1fd7fdd0e4538cc892ec44

railsではactivesuportで複数クラスの`to_s`メソッドを

元記事を表示

【Ruby】クラスとモジュールの違いと使い分け

##クラスとモジュールの違い

– クラスはインスタンスが生成でき、モジュールはインスタンスが生成できない
– クラスは継承でき、モジュールは継承できない

##クラスとモジュールの使い分け

moduleをclassにincludeをして使用できるようにする、ミックスインでの例。
モジュールはクラス間でメソッドを共有することができる。
モジュールをクラスに組み込むことで、クラス定義にメソッドをコピー&ペーストしたのと同じようにモジュールのメソッドをクラスで利用できるようになる。
これは、特定のクラスで再利用したいメソッドがあり、かつ、それを一カ所に集めておきたい場合に便利。

“`ruby
module Cream
def cream?
true
end
end

class Cookie
include Cream
end

cookie = Cookie.new
p cookie.cream?
#=> true
“`

##参考

http://ruby-for-beginners.rubymonstas.org/advanced/modules.ht

元記事を表示

[Rails]Webアプリケーションしか作った事ない僕が、ネイティブアプリケーションを作りたい

#はじめに
初学者の私が、2ヶ月でRailsを学びWebアプリケーションを作れるようになりました。
IOSでリリースをするに至って
まずどのような知識が必要かをまとめる記事になっています。

##React Native

React Nativeは、iPhoneとAndroidどちらでも動かすことができる開発用フレームワークです。
JavaScriptで開発することができるため、JavaやSwiftが書けないエンジニアでも、React Nativeを使えばアプリ開発ができます。
React Nativeの開発言語は、JavaScriptです。そのため、JavaScriptのコードを書ければAndroidとiOSの両方で開発が可能になるフレームワーク

“`
Reactに慣れている人にとっては学習コストの低いReact Native
ネイティブエンジニアには、逆に学習コストが高くなると考えられます。
“`
##Flutter

FlutterはGoogleが作ったモバイルアプリ用のフレームワーク。
「Dart」という言語を使って開発をしていきます。

“`
モバイルアプリ開発

元記事を表示

Rails7+devise+omniauthでCORS policyで怒られた時

## 問題

“`erb
<%= button_to "Sign in with Google", user_google_oauth2_omniauth_authorize_path %>
“`

こうしたら、こうなりました。

“`
Access to fetch at ‘xxx’ (redirected from ‘http://localhost:3000/users/auth/google_oauth2’) from origin ‘http://localhost:3000’ has been blocked by CORS policy
“`

## 解決法

https://github.com/hotwired/turbo/issues/288

に習い、`data: { turbo: false }`をつけてTurboを無効にしましょう。

“`erb
<%= button_to "Sign in with Google", user_google_oauth2_omniauth_authorize_path, data: { turbo: false }

元記事を表示

Rails 7 のアプリケーション設定のnew_framework_defaults_7_0項目を適当に調査

2021年12月16日に公式 Twitter からもアナウンスされたように Ruby on Rails の新しいメジャーバージョンである `7.0` がリリースされたので、アップグレードする時の参考記事として書いてみました。アップグレードの手順と、Rails 7 へ完全対応するための `new_framework_defaults_7_0.rb` の調査をしてみたたので需要あれば良いなと。

なお、たまたまこの記事を公開する時に [Ruby on Rails Advent Calendar 2021](https://qiita.com/adv

元記事を表示

【Rails】画像アップロード機能の実装

##手順
①gem “carrierwave“と“mini_magick“をインストール
②uploaders/image_uploader.rbを作成
③uploadersとモデルの紐付けやデフォルト画像の設定、ファイル指定などの細かい設定
④モデルに新たなカラムを追加(例:Postモデルにpost_imageというカラムを新しく追加)
⑤viewの記入
⑥画像アップロードフォーム
⑦画像アップロードに関する日本語化の追加設定

##①gem “carrierwave“と“mini_magick“をインストール
###Carrierwaveとは
Carrierwaveとは、ファイルアップロード用のgem。
Ruby on Railsの画像投稿の仕組みで、よく使われるgemの1つ。

###MiniMagickとは
MiniMagickとは、画像処理ライブラリで、画像サイズ変更や画像反転などといった様々な画像処理を行うことができる。

前提として、 **MiniMagickを使うにはImageMagickというものをインストールする必要があるので注意。**

“`

元記事を表示

OTHERカテゴリの最新記事