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

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

binding.pryが止まらない!

railsのデバッグのために `binding.pry` を使ったが、ループの中に入れてしまったので `exit` をしてもずっと止まらない!
こんな時に使えるコマンドがこちらです!↓

“`terminal
$ exit!
$ !!!
“`

上記のどちらかで止まります!
試してみてください^^

元記事を表示

[JS]アロー関数を少しだけ深掘りしてみた

アウトプットとして

関数を簡略化して記述できるアロー関数、調べてみるとちょっとしたテクニックがあるみたいだったのでまとめてみました。

ちなみにいろんな関数の定義の仕方や特徴はこちらにまとめています。
[JavaScriptの関数](https://qiita.com/Shi-raCanth/items/a6c2fabcc152b05f09bc)

#アロー関数とは
functionの記述を省略し、その代わりに()=>という記述によって関数を定義する構文です。より短い記述で関数定義をできるという点がメリット。

“`javascript
// 無名関数
const 変数名 = function(){
処理
}

// アロー関数
const 変数名 = () => {
処理
}
“`

##引数が1つの場合は丸括弧が省略できる
定義の際に`引数が1つしかない場合`は丸括弧を省略できる。
ただし、スプレッド構文`…`を使用する場合は省略できません。

“`javascript
// 省略しない
var hoge = (a) => {
処理
}

// 省略できる
v

元記事を表示

Dirクラスを解説

ruby silverの勉強をしていく中で間違えたところがあったのでその解説記事を挙げていきます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2485775/5d1866cb-e2ee-9696-2a44-6e410ffa3447.png)

今回の記事では、詳しい説明は省略させていただきます。[公式ドキュメント](https://docs.ruby-lang.org/ja/latest/doc/spec=2fdef.html#singleton_method)を読んでみてください。

結論からいうと、正解は、Dir.pwd以外の選択肢すべてです。
1つ1つの選択肢を調べましたので、ぜひ参考にしてください!

##そもそもDirクラスとは
めちゃザックリいうと、ディレクトリを色々操作できる、というクラスです。
今回問題で使われているpwdメソッド、globメソッドを例に紹介していきます。

###pwdメソッド
現在のディレクトリを出力するメソッドなんですね。
pwd(print w

元記事を表示

【Ruby on Rails】ActionMailer deliver_laterのrspecについての検討

## 前提
メール送信処理はすべて`deliver_now`で書いていましたが、処理が重過ぎてタイムアウトするので`deliver_later`に書き直しました。
結果rspecが軒並み死にました。FFF…
まぁ、そのままではうまくいかんだろうなという予感はしていました。
ということで、rspecの書き方を検討します。

## deliver_laterのrspecとして有効そうなこと
`deliver_later`は`ActiveJob`の処理なので、`ActiveJob`に近いテストを書くことはできそうです。

– jobの登録有無
– jobの内容

あとは、メール送信処理を即時にすれば、メールの内容などのテストも可能です。
`deliver_later`のテストは正直rails側で担保されていると思うので、deliver_laterを即時に変えるテストは有効かと思ってます。
意外と、deliver_later用!っていうrspecは用意されていないようです。調べ方が悪いかもしれないので、ありましたら教えていただきたいです…。mm

modelのテストをjobの登録の確認。

元記事を表示

【N+1問題】ループ処理の中でクエリを実行しない!

##N+1問題

ループ処理の中でクエリを実行しない!
大量のクエリが発行されるのでめちゃくちゃ重くなるので、
ループを実行する前にあらかじめデータ取得しておく。

####良くない例

“`ruby
books = Book.all

book_names = []
books.each do |book|
book_names << BookSynopsis.find_by(book_id: book.id).name end ``` ####良い例 ```ruby book_synopsis = Book.includes(:book_synopsis) book_names = [] book_synopsis.each do |book_synopsis| book_names << book_synopsis.name end ``` ##参考 https://qiita.com/shizen-shin/items/fffdf57feda979efb5d9

元記事を表示

Ruby on Rails 7でselect2を導入方法

[Webpackerの場合はこちらの記事です](https://qiita.com/YutoYasunaga/items/5cbbd546f51d8b37dac8)

### select2とjQueryインストール

“`
yarn add select2 jquery
“`

### select2 コントローラー作成

“`javascript:app/frontend/controllers/select2_controller.js
import { Controller } from “@hotwired/stimulus”
import $ from ‘jquery’;
import ‘select2/dist/css/select2.min.css’
import Select2 from “select2”

export default class extends Controller {
connect() {
Select2() // 自分の場合ではこれを呼ばないと動きません。
$(‘.select2’).select2();
}

元記事を表示

任意のタイムゾーンを持ったActiveSupport::TimeWithZoneオブジェクトを生成する

# お題

“`ruby
Time.zone_default
# => #, @utc_offset=nil>
Time.zone
# => #, @utc_offset=nil>
Time.zone.now.zone
# => “UTC”
“`

(戻すのが面倒だったり忘れたりするから)`Time.zone_default` や `Time.zone` は変更せずに、なんか好きな `ActiveSupport::TimeZone` オブジェクトをしょった `ActiveSupport::TimeWithZone` オブジェクトがほしい。

*activesupport-7.0.1/lib/activ

元記事を表示

[rails]いいねが削除できない? →ネスト時には引数が2つ必要

#はじめに
この記事はプログラミング学習の備忘録です。
今回はrailsでいいね機能の削除ができず、時間を使ってしまったのでまとめます。

今回分かったこととしては、**「ネストしている場合は引数を2つ指定する必要がある」**ということです。

#エラー内容
以下今回の記事の前提です。
・散歩習慣アプリを作っている
・投稿機能には、「walks」というモデルを使っている。
・いいね機能には、「likes」というモデルを使っている。

いいねを削除するために以下のように実装しました。

“`index.html.erb
<%= link_to "いいねを解除" ,walk_like_path(walk),method: :delete %>
“`

walk_like_path(walk)で投稿に紐づくいいねを指定、
method: :deleteも付けているので問題なさそうです。
しかし表示してみると、

[![Image from Gyazo](https://i.gyazo.com/eecd8e9a208e0ed922f9d335780693c8.png)](http

元記事を表示

redirect先を直前の画面に指定したい時

“`
redirect_back(fallback_location: root_path)
“`
と書けばエラーが出ず遷移できる。

元記事を表示

RailsのSTI / CTI / CCI

# STI / CTI / CCI
STI = Single Table Inheritance/単一テーブル継承
CIT = Class Table Inheritance / クラステーブル継承
CCI = Concrete Class Inheritance / 具象クラス継承

[エンタープライズアプリケーションアーキテクチャパターン](https://www.amazon.co.jp/dp/B01B5MX2O2/ref=as_li_ss_tl?ie=UTF8&linkCode=sl1&tag=yebihara-22&linkId=453908099846882b69fac8bbb92b3281_)で触れられている、オブジェクト指向で設計されたスーパークラス / サブクラスからなる継承関係をリレーショナルデータベースのテーブルとして実装する3つのパターン。

# Model
抽象クラスとしてのAnimalモデルに対して、具象クラスとしてDog / Cat / Birdが存在する。

“`ruby
class Animal < ActiveRecord::Base end ``

元記事を表示

Rails7をちょっと試す(turbo_frame_tag あるいは、さらばJavascript編)

## はじめに

Rails 7.0.0 には、 [Turbo](https://github.com/hotwired/turbo-rails) が組み込まれています。
今回はその中で、 `turbo_frame_tag` を試してみたいと思います。
`turbo_frame_tag` を使って、詳細画面を表示したまま編集できるようにするSPAっぽいことをやってみます。

`turbo_frame_tag` を使うと、Javascript を1行も書くことなく SPA を書けるんじゃないかと妄想しています。

以下のバージョンで確認しました。

– Ruby 3.0.2
– Rails 7.0.0
– npm 8.3.0
– yarn 1.22.17

## Rails プロジェクトを作る

新しくRailsプロジェクトを作ります。このとき `
(データベースオプションを指定しているのに深い意味はありません。)

“`shell
mkdir rails_sandbox
cd rails_sandbox
rails new . –database=postgresql
“`

#

元記事を表示

systemテストを落とさないようにするコツ2つ

Railsのsystemテストは、ランダムに落ちたり落ちなかったりすることがあります。ここでは、ランダムに落ちるテストをどうにかするためのコツを2つ紹介します。

## 基本

systemテスト(ブラウザーを使ったE2Eテスト)では、次の3つのアプリケーション(プロセスまたはスレッド)がバラバラに動いていると考えてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308595/06ca5a79-99ab-e107-aeae-531a781f31cb.png)
テストがランダムに落ちる原因でよくあるのは、テストが進行するに従って、テストプログラムがほかを置いて先走ったり、ブラウザーが先走ったりすることです。

systemテストでこの3つの進み具合を揃え、ランダムに落ちないようにする基本は、何か動作を起こすたびに、画面のチェックを入れることです。

“`ruby
click_link ‘製品一覧’
expect(page).to have_css(‘h1’, text: ‘製品

元記事を表示

【Rails】Rails APIコントローラーの書き方

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

## Rails APIコントローラーの書き方

“`posts_controller.
class Api::V1::PostsController < ApplicationController def index render json: Post.all end def show render json: Post.find(params[:id]) end def create post = Post.new(post_params) if post.save render json: post else render json: post.erros, status: 422 end end

元記事を表示

Rails Googleアカウントでユーザ登録する方法 [SNS認証] 

#ゴール 

>gooleアカウントでログインできるようになる。

#前提
>gem ‘devise’ 導入済み

#STEP1 Google Cloud Platformに登録

>[ここからアカウント登録してください!](https://console.cloud.google.com)

##登録が終わったら以下の手順で設定
**以下写真です。見にくくて申し訳ないです。**
![1個目.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1874115/64db3d8b-74a5-ab0e-fcde-c047b7a01926.png)
![2個目.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1874115/28182a34-9eb9-fb1b-11b2-f96a0d06b374.png)

![3個目.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws

元記事を表示

多重代入についてまとめてみました

ruby silverの勉強をしていく中で間違えたところがあったのでその解説記事を挙げていきます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2485775/042e8990-4236-4e6f-1a92-2c972420c4a8.png)

##多重代入

###基本的な使い方
“`
a, b, c = 1, 2, 3
a
# => 1
b
# => 2
c
# => 3
“`
##右辺の要素が左辺の要素よりも多い場合は無視される
“`
a, b = 1, 2, 3
a
# => 1
b
# => 2

#この場合3は無視される
“`
##右辺の要素が左辺の要素よりも小さい場合は無視される
“`
a, b, c = 1, 2
a
# => 1
b
# => 2
c
# => nil

該当する要素がない場合は、nilになる
“`
##残った要素は、配列として格納される
“`
a, *b = 1, 2, 3
a
# => 1
b
# => [2, 3]

・残りの要素が

元記事を表示

[JS](基礎)関数について

アウトプットとして

Rubyでいうところのメソッドを、JavaScriptでは関数と呼びます。
この関数ですが、いろんな記述の方法があるので整理するために記事にしたいと思いました。

##いろいろな関数定義
### 関数宣言(function)
JavaScriptでは`function 関数名(){ 処理 }`と記述することで関数を定義することができます。

“`javascript
function 関数名(引数) {
// 処理
}
“`
“`javascript:例
function calc(num1,num2){
return num1*num2
}

const num1 = 3
const num2 = 4
console.log(calc(num1,num2)) // => 12
“`

###無名関数
無名関数は、関数名なしで関数を定義することができます。より簡潔なコードが記述できるという点がメリット。

“`javascript
const hello = function(){
// 処理
}
“`
“`javascript:例
c

元記事を表示

rails GoogleFont導入仕方

# 1.はじめに
RailsのHTML/CSSに対して、***GoogleFont適用する2つの方法***を学んでもらうのが
***`この記事のゴール`***だよ!

# 2. まずは、GoogleFontのサイトから使用するFontを選ぶ

[GoogleFontのサイト](https://fonts.google.com/)
↑ ここからサイトへ飛びます

![スクリーンショット 2021-11-23 18.55.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1803665/7c37b7cf-68b2-20e7-cfb1-e67d6ba907c8.png)

そしたら上記のページに行くと思います。

この中から**使用したいフォント**を選択します。

今回は変化がわかりやすいように`”Comforter Brusho”`を使います。

![スクリーンショット 2021-11-23 18.57.06.png](https://qiita-image-store.s3.ap-northeast-

元記事を表示

【Rails API】devise_token_authで作成したコントローラにルーティングを追加したい【memo】

# 課題

– ゲストログインを実装する際に、既存の`sessions_controller.rb`にメソッドを追加する

“`ruby:api/v1/users/auth/sessions_controller.rb
# frozen_string_literal: true

class Api::V1::Users::Auth::SessionsController < DeviseTokenAuth::SessionsController # 今回はこれを追加! def guest_sign_in # ゲストログイン処理 end end ``` # 問題 ルーティングをなかなか追加することができませんでした。 `devise_scope :user`と記載したのですが、なかなかうまくいかず・・・。 ```ruby:routes.rb Rails.application.routes.draw do namespace :api do namespace :v1 do ### 失敗した実装 ### dev

元記事を表示

RubyのFileの解説

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2485775/89d8d195-25a6-4176-5803-55e9cfe53d7a.png)
rubyのsilverを勉強していく中で、この問題が正解できなかったので、それを解説する意味でもこの記事を書かせていただきます。

この問題を正解するうえで、抑えておくべきポイントは、

1. w :書き込みモード。
2. w+ :読み書きモード。既にファイルが存在する場合は、空になります。新規作成もされます。
3. r :読み込みモード。
4. r+ :読み書きモード。ファイルの読み込みと書き込みの位置は文の先頭から。
5. a :追記モード。既存のファイルの文末に入力内容を追記する。
6. a+ :読み書きモード。ファイルの読み込み位置は先頭に、書き込み位置は常に末尾になる

1個ずつ解説していきますね

##w
wはwriteのwと覚えれば役割がはっきりしますね。
既存のファイルに、書き込みをしていく機能なんですね。

##r
readの

元記事を表示

railsでカレンダー機能を実装する方法

#はじめに
 この記事はプログラミング学習の備忘録です。
 現在習慣化アプリを実装中です。その中でsimple_calenderを使って簡単にカレンダー機能を実装する方法について学んだので紹介します。

#実装の目標
①以下のようなカレンダーを導入する
②タスクを記録したら、カレンダーが緑色になるようにする
[![Image from Gyazo](https://i.gyazo.com/99f90661b07a347092af44ad610d1197.png)](https://gyazo.com/99f90661b07a347092af44ad610d1197)

#gemfileを導入 
・gemfileに以下の記述をします。

“`
 gem ‘simple_calendar’, ‘~> 2.0’
“`

その後忘れずに、bundleinstallしましょう。

これでgemfileの導入は完了です。

#モデルの設定をする
 以下のようにモデルを設定します。今回はテストなのでシンプルな形で作ります。
マイグレーションファイルに以下のように記述して、「rails db:m

元記事を表示

OTHERカテゴリの最新記事