Rails関連のことを調べてみた2022年02月25日

Rails関連のことを調べてみた2022年02月25日

Rails6 Action Text と Active Storageの実装 Cloudenaryにアップロード リッチテキスト 複数画像投稿

# 環境
“`
$ rails -v
Rails 6.1.4.4

$ ruby -v
ruby 3.0.2

macOS Monterey
version 12.2
“`

デモ
![名称未設定.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324819/76d47081-5093-39a4-5c91-556302a2835a.gif)

# 参考記事
https://railsguides.jp/active_storage_overview.html

https://railsguides.jp/action_text_overview.html

https://cloudinary.com/documentation/rails_activestorage

# アプリの作成

“`
$ rails new text_strage_app
$ rails g scaffold Post title:string
$ rails db:migrate
“`

# Active St

元記事を表示

[テスト] qiita api items

テストです。

元記事を表示

【Rails】APIモードのルーティング例

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

## Rails APIモードのルーティング

### ルーティング例

コメントで解説を記述していますのでご確認ください。

“`config/routes.rb
Rails.application.routes.draw do
# namespaceで名前空間を付与する。
namespace :api do
# APIに大きな変更が発生する場合に備えてスイッチングしやすいようにURL自体にバージョンを持たせる。
# ただし、バージョンは「必要な場合にのみ」つけることが推奨されている。
namespace :v1 do
# resouresはindex、show、new、edit、create、update、destroyアクションに対応するルーティングを

元記事を表示

CGI.escape

CGIモジュールのescapeメソッド

“`
# @をエスケープ
>> CGI.escape(‘foo@example.com’)
=> “foo%40example.com”
# ‘とスペースと!をエスケープ
>> CGI.escape(“Don’t panic!”)
=> “Don%27t+panic%21”
“`
テストファイルでテスト用ユーザーのメールアドレスをエスケープできる
“`
CGI.escape(user.email)
“`

元記事を表示

Rails いいね機能の非同期を実装する際の注意するべきポイント

いいねの非同期を行う際、何回かエラーでつまづいた。
そんな時に確認するべきポイントをまとめる!!

##1.jQueryがちゃんと読み込まれているか

“`Gemfile.
gem ‘jquery-rails’
“`
その後、bundle install を忘れずに。

“`app/assets/javascripts/application.js
//= require jquery
//= require rails-ujs
//= require jquery_ujs
“`

“`webpacker/environment.js
const { environment } = require(‘@rails/webpacker’)

const webpack = require(‘webpack’)
environment.plugins.prepend(‘Provide’,
new webpack.ProvidePlugin({
$: ‘jquery/src/jquery’,
jQuery: ‘jquery/src/jque

元記事を表示

includesを使ってSQLの発行件数を減らそう(N+1問題)

## SQLの発行件数が多いと指摘を受ける。

業務にて、ある一覧画面を作成していたところ、
自分が書いたソースをみた先輩から、
「この一覧画面のSQLの発行件数が多すぎる。ちょっと減らしてみて。」とご指摘を受けました。

SQLの発行件数が多いのはN+1問題が起きていたことが原因で、
includesを使用することで
事象を解決できたのでアウトプットしてみようと思います。

## N+1問題とは
必要以上にSQLが実行されて、パフォーマンスが低下する問題。
今回指摘を受けた画面では、
ログを見ると、他のテーブルの情報を取得するため何度もSQLが発行されていました。

## includesとは

includesメソッドは、関連している複数のテーブルからデータをあらかじめ取得するメソッドです。

N+1問題を解決させるためには、
都度SQLを発行させるのではなく、あらかじめデータをすべて取得しておくことで解決することができます。

例えば、
UserクラスとPostクラスがあって、
投稿からユーザ名を取得する処理があったとします。

“`rb
# models/user.rb
cl

元記事を表示

assert_matchメソッド

正規表現で文字列をテスト。

assert_match( regexp, string, [msg] )

stringは正規表現 (regexp) にマッチすると主張する。

“`rb
assert_match ‘foo’, ‘foobar’ # true
assert_match ‘baz’, ‘foobar’ # false
assert_match /\w+/, ‘foobar’ # true
assert_match /\w+/, ‘$#!*+@’ # false
“`

[Rubular](https://rubular.com/)

元記事を表示

【Rails】ログイン機能をGem ‘devise’で実装

こんにちは。
早く駆け出したい修行僧です。

今回は、Gemの ‘devise’ を使ったログイン機能を学んだので、
こちらにアウトプットさせていただきます。

尚、「それは違うよ」など訂正箇所がございましたら、
愛のあるご指摘を頂けたら幸いです。

# 環境
macOS Monterey(M1) 12.2.1
ruby 3.1.0
Rails 6.1.4.6
devise 4.8.1

# ‘devise’とは
特定のページを閲覧したりユーザに制限をかけたりするためには**ログイン認証**が必要となってきます。ログイン認証とはログインやログアウトの機能を指します。
そして、それらは新規登録をしないと始まりません。そんな機能を簡単に実装してくれる優れたgemが ‘devise’ です。

# インストール
`rails new` でアプリ作成済みであることを前提とします。
まずは導入したいアプリケーションのGemfileに以下のコードを挿入します。

“`ruby:G

元記事を表示

クエリパラメータ

# クエリパラメータとは
クエリパラメータとは、URLの末尾で疑問符「?」に続けてキーと値のペアを記述したもの。

“`
…/edit?email=foo%40example.com
“`

上記の場合、?email=foo%40example.comがクエリパラメータ。

? からクエリパラメータを示して、emailがキー(パラメータ)としてfoo%40example.comを指定している。

“`
?キー(パラメータ)=キー(パラメータ)の値
“`

#### %40はURLエンコード

値の表記に使用できない文字を含めたい場合は、「URLエンコード」あるいは「パーセントエンコーディング」と呼ばれる方式で安全な文字列に変換。
これは「エスケープ」と呼ばれる手法で、通常URLでは扱えない文字を扱えるようにする。

@はURLエンコードだと%40となる。

[URLエンコード変換ツール](https://tech-unlimited.com/urlencode.html)

URLのクエリパラメータではキーと値ペアのを複数使うこともでき、その場合

元記事を表示

アプリを作る パスワード再設定のメール送信

### app/mailers/user_mailer.rb
“`rb
class UserMailer < ApplicationMailer def account_activation(user) @user = user mail to: user.email, subject: "アカウントを有効化" end def password_reset(user) @user = user # インスタンス変数に代入する mail to: user.email, subject: "パスワードをリセット" end end ``` ### app/views/user_mailer/password_reset.text.erb ```text パスワードをリセットするには、以下のリンクをクリックしてください: <%= edit_password_reset_url(@user.reset_token, email: @user.email) %>

このリンクは2時間で期限切れになります

パスワードのリセッ

元記事を表示

Rspecのallow_any_instance_ofを書き換える

# はじめに
インスタンスメソッドのスタブを `allow_any_instance_of` で書いていたのですが、どうやらこれが非推奨らしいので、これを書き換える方法をメモがてら記事にしました。

# allow_any_instance_of を使ったテスト

テスト対象のファイルはこちら

“`ruby:test.rb
class Test
def test_method
hoge = Hoge.new
hoge.hello
end
end

class Hoge
def hello
“hello!”
end
end
“`

そして `allow_any_instance_of` を使ったスペックファイルがこちら

“`ruby:test_spec.rb
require_relative ‘test’

describe ‘Test’ do
context ‘test_method’ do
before do
allow_any_instance_of(Hoge).to receive(:hello).and_

元記事を表示

【個人開発】面倒くさがり屋のための糖質収支ジャッジアプリ「Sugarjudge」をリリースしました

## はじめに
みなさんは食事管理が得意ですか?
「痩せたくて食事制限をしようとしても面倒ですぐにやめてしまう」
そんなことありませんか?
私はそんな面倒くさがり屋のために食事管理のハードルを下げたアプリ「Sugarjudge」を作成しました。

## サービス概要
アプリURL https://www.sugarjudge.com/
GitHub https://github.com/udakohei/Sugarjudge
![9pz4Ykqg6Htc1JR1643600668_1643600722.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2534184/166a6996-d662-4a41-0a89-58623e2e4d79.png)
痩せたいけど食事を管理、制限することが面倒で難しいという悩みを持った人に、
簡単でざっくりと楽しく糖質を管理、制限できる環境を提供する、
糖質収支ジャッジアプリです。

* 糖質収支を、一食の摂取糖質量から一食に摂取しても良い上限の糖質量を引いた値として考え

元記事を表示

YouTubeDataAPIを用いた複数チャンネルのライブ配信ステータス取得において、リクエストの上限制限を回避する

### 概要

– YouTubeDataAPIでは一日の上限Queries(呼び出し回数 × Cost)が制限されているため、「任意の配信者の動画一覧を取得し、その配信者が現在配信中の動画のリアルタイム情報(視聴者数など)を毎分APIを通して監視しよう」と考えるとすぐにAPI上限に達してしまう
– YouTubeが公開しているRSSフィード用のURL経由で最新動画1件のvideo_idを調べ、そのidの動画情報のみをAPIを用いて取得することで、Queries上限に達しないよう節約している

### 使用環境
– Rails 6.0.4.1
– YouTube Data API v3
– MariaDb Ver 15.1

### データベース

**配信者テーブル (streamers)**

| id | title | channel_code | description |
|:-:|:-:|:-:|:-:|
| 1 | YouTubeアカウント名| チャンネルID | チャンネル概要 |
| 2 | 27歳高学歴ニートさの | UCmFq0wZGLfjtXdUINy

元記事を表示

【環境構築サクッとメモ】rails×reactとlaravel×vuejsとlaravelの参考メモ

新しい言語のキャッチアップをする時には環境構築が必要になります。
Dockerだったら簡単に構築出来ますよね。

他の人が作ったリポジトリを参考にすれば、早く環境構築が終わるので楽ちん。
以下をDockerで構築した記事をメモがわりに残しておきたいと思います。

・rails×react
ブログ
【Docker】Rails6 API + React(TypeScript)のSPA開発環境を構築する
https://qiita.com/taki_21/items/613f6a00bc432d1c221d
github
https://github.com/taki-21/rails-react-ts-docker

・laravel×vuejs
Qiita
【導入編】絶対に失敗しないDockerでLaravel + Vue.jsの開発環境(LEMP環境)を構築する方法〜MacOS Intel Chip対応〜
https://yutaro-blog.net/2021/04/28/docker-laravel-vuejs-1/
github
https://github.com/shimot

元記事を表示

【Ruby On Rails】radio_buttonを数値として扱いparamsを使って合計点数など計算する

# 環境
– Mac(12.2.1)
– MacBook Pro (13-inch, 2020)
– 2 GHz クアッドコアIntel Core i5
– 16 GB 3733 MHz LPDDR4X
– ruby (3.0.0p0)
– rails (7.0.1)
– mysql2 (0.5.3)

# 実現したい内容
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/747746/e578b5ca-28c4-3194-3c10-810d75bd1631.png)

上記の質問内容に対してラジオボタンを押したときに

* はい=>2点
* いいえ=>0点
* どちらでもない=>1点

と、それぞれのラジオボタンを点数として取り扱う

更に、それらの点数を合計し、結果をDBに保存する

# 主に使用したメソッド
・ [form_with]
・ [radio_button]
・ [label]
・ [submit]
・ [params]

# viewには何を書く?
vie

元記事を表示

form_forにおけるsubmitの役割について

<%= form_for @post do |f| %>

<%= f.label :body %>
<%= f.text_field :body, :size => 140 %>

<%= f.submit "投稿する" %>
<% end %>

におけるf.submitの役割は
@postの中身がPost.new(空の箱)の場合はcreateアクションに遷移する。
投稿内容を書き換えたい場合、
@postの中身を書き換えることになり、中身はPost.newではないので、その場合はupdateアクションに遷移する仕組みとなっている。

元記事を表示

「Herokuの起動が重すぎる」を解決する方法

#はじめに
 現在オリジナルアプリで朝散歩習慣化アプリを作っています。
Herokuにデプロイしているのですが、立ち上がりがとにかく遅くて使い勝手が悪い。
今回はHerokuの立ち上がりを早くする方法について学んだのでまとめます。

#なぜ起動が遅くなるのか
 Herokuの立ち上がりが遅い原因は、「30分アクセスがないとスリープモードになる」という仕様があるためらしいです。
そのため、スリープにしないために設定を変える必要があります。

#Herokuにスケジューラを追加

まずはターミナルで下記のコマンドを打ちます。

“`
% heroku addons:create scheduler:standard
“`
すると以下のような表示が出ます。

“`
Creating scheduler:standard on ⬢ morning-walk… free
To manage scheduled jobs run:
heroku addons:open scheduler

Created scheduler-flexible-28737
Use heroku a

元記事を表示

【Rails】macのrailsサーバーに他の端末からアクセスする方法

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

## macのrailsサーバーにiPad等でアクセスする方法

macローカルでrailsウェブサービスを作ってて、スマホ実機でテストしたいとき。
エミュレータでもいいけど、実機じゃないとテスト出来ないときってありますよね…

### macと他の端末を同じWi-Fiに繋げる
macと他の端末を同じWi-Fiに繋げます。

### macのローカルIPアドレスを確認する
#### GUIで確認する方法
アップルメニューから「システム環境設定」を選択。
![スクリーンショット 2022-02-24 2.11.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/b53c4860-d0a6-b64b-d51

元記事を表示

【rails】機能削除等で不要なテーブルが出てきた時の対応

はじめに

不要な機能削除が発生した際に、その機能でしか使ってなかったようなテーブルがあった場合は原則削除したほうがよいと思う。不要なソースコードやテーブルが残っていると混乱を招くだけなので。(ただし、なにかしらの理由で残しておいたほうがいい場合を除く)

ただし、いきなり削除すると問題があった時に面倒なので、いったんrenameしてアクセスできなくして、しばらく運用して問題なければdumpをとって削除する。万が一問題があったら元のテーブル名に戻す。

注意

プロジェクトごとにやり方があると思うので、あくまで参考程度にしてください。

手順

### 不要な機能の削除方法

– 不要な機能のソースコードを削除する
– 別の場所で共通で使っている部分がある場合があるので注意する
– 不要な機能の削除に関わるspecを削除する

### テーブルのrename

– codeを全検索して model が使われていないことを確認する
– テーブルをrenameするmigrationファイルを作成する
– no_more_use_<元のテーブル名>のような名前にすると

元記事を表示

bundle exec rspec実行時にSelenium::WebDriver::Chrome#driver_path= is deprecated.〜 エラーが発生した

# bundle exec rspec実行時のエラー解決備忘録

## エラー内容

– RSpecでテストを実行使用とした際に、下記エラーが発生した。

“`
$ bundle exec rspec2022-02-23 18:27:19 WARN Selenium [DEPRECATION] Selenium::WebDriver::Chrome#driver_path= is deprecated. Use Selenium::WebDriver::Chrome::Service#driver_path= instead.
“`

## 解決方法
– Gemfileの記載内容を修正
– gem ‘chromedriver-helper’ を削除
– gem ‘webdrivers’ を追加し、bundle installを実行
– 再度bundle rspec test を実行し、無事テストが走った

“`
group :test do
# Adds support for Capybara system testing and selenium driver

元記事を表示

OTHERカテゴリの最新記事