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

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

returnはつけるの無粋すぎる

こちらはプログラマーなりたてのへっぽこパンピーが、自分の自分による自分のための忘備録として書いてるので、間違いもがあるかもですがあしからず!

# Rubyは基本的に関数内でreturenを記述する必要がない
そもそも、関数内でreturnが必要ないってのは、僕も知ってたんですよ。

“`Ruby
#これはたとえ
def addition(x)
x + 1
end
“`
でもかたかたコードを書いた結果、なぜか関数からの返値が**nil**になってたんですよ。
もうその時は、**nanu!?** ってなりましたね。

“`Ruby
#これはたとえ
def addition(z)
a = x + 1
return a
end
“`
だからreturnを追加してしっかり値が返るようにしたんですよね。
でもそれがどんなに**非道な行いだと**は思いよりませんでした….

結果からいえば、returnいらないよって言われた際に
**「いやでも、値返ってこんかったし」** と心のマリワナ海溝より深いところで思ったので、証明してみたく再度試してみたら、returnを記述しなくても

元記事を表示

devise_token_authのメール認証済みでないとログインできない機能をRSpecでテストする方法

はじめに

devise_token_authのログイン機能が開発し終わったので現在RSpecでテストを書いているのですが、”メール認証済みでないとログインできない”というテストを書くことができたので、備忘録として残そうと思います。

sessions_spec.rbで何をテストするか

devise_token_authで設定をすればアカウント作成時にメールで本認証を行わないとログインができない機能を実装することができます。
この”sessions_spec.rb”は、ログイン機能を担当しているので”メールが送信できているか?”などのテストではなくシンプルに、
~~~
・認証が済んでいればそのアカウントはログインできる
・認証ができていなければそのアカウントはログインできない
~~~
という2点が問題なく動作していることをテストで確認できればOKという考えになりました。
アカウントを作成する箇所のテストについては、registrations_spec.rbで記述します。
(その他パスワードやメールアドレスが間違っている場合はログインできない等のテストは書いていますが、認証とは

元記事を表示

インデントを合わせないのはインシデント

こちらはプログラマーなりたてのへっぽこパンピーが、自分の自分による自分のための忘備録として書いてるので、間違いもがあるかもですがあしからず!

## コードを記述する時はインデントを合わせるべし
プログラマーからしたら言わずもがなことかもしれないのですが、あだち充の主人公の違いもわからない粗雑な人間は、ついつい微妙にずれてる場合が多い。
“`Ruby
if kazuya_hadnt_died
puts ‘atsuya would not be playing baseball’
end
“`
段落ごとにスペース2つ分あけたら、こうなるやろ
“`Ruby
if kazuya_hadnt_died
puts ‘atsuya would not be playing baseball’
end
“`

この微妙な違いに気づかなかった人はドンマイとしか言いようがないが(僕もドンマイ側の人間ではあります)、それだけでは済まされないのです。

>インデントの微妙な違いに気づかない男は、女性の微妙な変化にも気づけない不幸な人間だ

と、アラン・チューリングも言ってたらしいけど、たぶん言

元記事を表示

プログラミングスクールを卒業して思うこと

# はじめまして! 

私はDMM WEBCAMP COMMIT(以下DWC)を8月に卒業しました[すずしゅん](https://twitter.com/6heouP1HUKGRAJe)と申します。
前職は地方のホームセンターで販売員をしていました。
これからスクールに通おうと考えている方や在校生の参考になればと思い記事にしました?‍♂️

# 目次
* なぜプログラミングスクールに通おうと思ったか
* 1ヶ月目
* 2ヶ月目
* 3ヶ月目
* 4ヶ月目
* 学習中に取り組んだこと
* 学習中に意識していたこと
* スクールの感想
* プログラミングはスポーツと同じだと思う
* 最後に

# なぜプログラミングスクールに通おうと思ったか
独学でプログラミングを習得できなかった、つまり挫折したことが大きなきっかけです。
学習をしていくなかでエラー解決ができずに1日過ぎてしまうことがあり、
このまま惰性で続けていても、エンジニアになれないと思っていました。

プログラミングスクールは以前から知っていて、興味本位で説明会に出席したのですが、
そこで言われた言葉がとても印象に残っています。

元記事を表示

[Rails]冷や汗?本番DBを誤った値で書き換えた話(“_”でのwhere検索)

## 概要
データを更新する処理を行なった際に、
検索条件に”_”が入ることで予期せぬデータを書き換えてしまいました。

## 問題となったコード
Brandテーブルのnameカラムが”_”のものだけ、”ユニクロ”に変更したいというコードです。
“`
Brand.where(“name LIKE?”, “_”).update_all(name: “ユニクロ”)
“`

## どこが間違っているか

`Brand.where(“name LIKE?”, “_”)`で検索すると、
“_”のものだけではなく、
数字1文字のものや、漢字1文字のものなどにもヒットしてしまいます!

## 理由
– [Railsガイド](https://railsguides.jp/active_record_querying.html#:~:text=%E5%BC%95%E6%95%B0%E3%81%AFSQL%E3%82%A4%E3%83%B3%E3%82%B8%E3%82%A7%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E9%98%B2%E3%81%90%

元記事を表示

Rails

## 前置
各役割や書き方などをまとめてみました
サンプルコード→解説という形式です
コードはコピペでくっつけたものなので、意味としてはぐちゃぐちゃです
こんな感じで書くんだーって程度に見てください

## コントローラ
“`terminal
rails g controller Users new
“`
– `rails g controller コントローラ名 アクション名`
– コントローラ名は、頭大文字、複数形
– コントローラファイルとビューフォルダとアクションが生成

“`app/controllers/users_controller.rb
class UsersController < ApplicationController before_action :logged_in_user def show @user = User.find(params[:id]) end def new @user = User.new end def create @user = User.new(user_params

元記事を表示

FactoryBot で save 時に context を渡す

# 前置き: validation_context とは

避けたい `validation` がある時など、`validation` の条件に `validation_context` を利用し、

“`app/model/user.rb
class User < ApplicationRecord before_validation :set_bar, unless: -> { validation_context == :hoge }
# …
end
“`

`save` 時に、`context` を指定してあげれば、`validation` を避けられます。

“`app/controller/user/user_controller.rb
class User::UsersController < User::ApplicationController def create @user = User.new(user_params) @user.save(context: :hoge) # ...

元記事を表示

brew upgrade後のrails sエラー(postgresql@14)

## 概要
Macにて`brew upgrage`コマンドを実行時に、
postgresqlバージョンアップ(14.3 ➡︎ 14.5)が自動で実施された。
その後、`rails s`コマンドにてエラーが発生。
その解消方法について、備忘録として残す。

## 環境
| もろもろ | バージョン |
| :— | —: |
| Mac | 12.5.1
(Monterey) |
| Ruby | 3.0.1 |
| Rails | 6.1.6.1 |
| Homebrew | 3.5.10 |
| PostgreSQL | 14.3 ➡︎ 14.5
(アップデート)|

## 発生したエラー
`rails s`コマンド実行

“`
/Users/username/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/bootsnap-1.13.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require’: dlopen(/U

元記事を表示

Herokuの代わりにFly.ioでrailsをデプロイする。(windows版)

>[Fly.ioでRailsアプリをデプロイしてみた for Mac](https://qiita.com/yuuki-h/items/ec23de152368d36672ea)

Herokuが11月末から無料で利用できなくなるという事をお聞きしたので、上記記事を参考にwindows版でのリリースを模索した備忘録です。(macの方は上記記事でデプロイできます!)

勉強不足故、お見苦しい箇所もあるかと思いますが温かい目で読んでいただけると幸いです。

# 手順

1.準備
2.Fly.ioの登録、インストール
3.リリース

# 1.準備

###### 1-1.コマンドプロンプトでは**一部Fly.ioのコマンドが使えない**ため“`PowerShell“`を利用します。

開き方はキーボードで「Windowsキー」+「R」と打つと検索バーが出てくるので
「PowerShell」と打ち込んでEnterです。
![qiita1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1874115/b4

元記事を表示

【Rails】サブディレクトリで動かす方法

## サブディレクトリで動かす方法

“`./config/environments/development.rb
require “active_support/core_ext/integer/time”

Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb.

# In the development environment your application’s code is reloaded any time
# it changes. This slows down response time but is perfect for development
# since you don’t have to restart the web server when you make code changes.
config.cache_classes = false

# Do

元記事を表示

確認ダイアログに変数をぶち込む方法 rails + javascript

## やりたいこと

プロ野球の試合を予想するアプリを作っています。
以下の画像のように確認ダイアログに変数を表示したい。(下記画像のチーム名とスコアは変数である)
![https://i.gyazo.com/9fd0b8470b61681e0780fd3d441d61d8.png](https://i.gyazo.com/9fd0b8470b61681e0780fd3d441d61d8.png)
## やり方
Railsで確認ダイアログで変数を表示することはほぼ不可能らしい。よってJavaScriptに頼る。
しかしフォームを送信し保存する処理はRailsで書いた。
なのでフォーム送信はRailsで実装。確認ダイアログの表示はJavaScriptで実装していく。
## 手順

1. railsで確認ダイアログの表示設定を消す
2. JavaScriptで確認ダイアログを表示する
3. 送信ボタンにイベントを設定する
4. 確認ダイアログに変数を格納する
5. confirmメソッドの性質を理解する
6. 処理を分岐させる

## 1, railsで確認ダイアログの表示設定を消す
確認

元記事を表示

突然rails: command not foundと言われてびっくりした時の話。

## おこった事
`rails db:migrate`を(docker環境)をしようとしたら以下のエラーが起こった。

“`sh
rbenv: rails: command not found
“`

いや、そんなはずないでしょ。`docker`でrailsは立ち上がっているんだし。(↓こんなのは出てた)

“`sh
app-name | Puma starting in single mode…
app-name | * Version 3.12.1 (ruby 2.4.5-p335), codename: Llamas in Pajamas
app-name | * Min threads: 5, max threads: 5
app-name | * Environment: development
app-name | * Listening on tcp://0.0.0.0:3000
app-name | Use Ctrl-C to s

元記事を表示

Rails7でImport mapsを使ってjQuery UIを動かす

Rails7にjqueryとjquery-ui-distをセットアップする方法を解説します。

# jqueryとjquery-ui-distをピン留めする
“`ruby
# config/importmap.rb
pin “jquery”, to: “https://ga.jspm.io/npm:jquery@3.6.0/dist/jquery.js”
pin “jquery-ui-dist”, to: “https://ga.jspm.io/npm:jquery-ui-dist@1.13.1/jquery-ui.js”
“`

# jqueryとjquery-ui-distをインポートする
“`ruby
# app/javascript/application.js
import jQuery from “jquery”;
window.$ = window.jQuery = jQuery;
import(“jquery-ui-dist”)
“`

([How to use jqueryUI in a rails 6 or rails 7 alpha engine](htt

元記事を表示

GoogleDriveが表示されない。

# はじめに
本記事はプログラミング初心者が、railsの学習を進めながら、躓いた部分、解決した箇所、またそれらの解決方法を備忘録も兼ねてまとめているものです。
最初はprogate。そのあと、「現場で使える RubyonRails5 速習実践ガイド」(通称)「現場Rails」を参考に進めていきました。
そのため、記事の内容には誤りがある可能性があることをご理解ください。
誤りがあればお手数ですが、ご指摘いただければと思います。よろしくお願いします。

# 環境
Ruby 3.1.2
Rails 7.0.3.1

“`new.slim
.d-flex.flex-column.bd-highlight.mb-3
iframe src=”https://drive.google.com/file/d/1VuZoeLxVGNaEAs41OFyc5tCWpTU8Wbq4/view?usp=sharing” width=”100%” height=”100%”
.d-flex.justify-content-center
= f.check_box :agree

元記事を表示

【Rails】ストロングパラメータについて勉強しました【form_with】

# 目的
[Railsチュートリアル 第7章](https://railstutorial.jp/chapters/sign_up?version=6.0#sec-strong_parameters)にて**ストロングパラメータ**という概念が紹介されていたので、その必要性と実装方法をまとめます。

# 今回開発するもの
**Userモデル** ユーザー
has_many: posts
`id`カラム: userインスタンスが作成されると自動付与される値

**Postモデル** ユーザーが行う投稿
belongs_to: user
`content`カラム: 投稿内容
`user_id`カラム: 投稿とユーザーを紐づける値

**表示画面**
`content`にテキストを入力し、送信すると新規postに`content`と`user_id`が入力される。
という機能を実装します。

これを実装するための`create`アクションをストロングパラメータを使わずに(Progate的に)書くと下記の様になります。
“`ruby:posts_controller
def create

元記事を表示

【Rails】CanCanCanでリソースが特定の条件を満たすときのみ権限を付与する方法

Railsにおいて権限設定を簡単に実装できる方法は、Cancancanを使うことが1つの手段として考えられます。
https://github.com/CanCanCommunity/cancancan
cancancanを使った権限設定では、**特定の条件を満たすリソースについては特定のアクションを許可したい**、という場合があります。
そんな時に取れる対応方法を紹介します。

# 想定ケース

**ユーザーは、企業名(name)にhogeの文字列を含む企業についてはメールを送れる。**

こんな権限設定がしたいとします。
準備として、companyモデルで「名前にhogeが入っている」ことを判定するインスタンスメソッドを定義します。

“`ruby:company.rb
class Company < ApplicationRecord ...(略) def include_hoge? name.include?('hoge') end end ``` # Abilityの書き方 この場合、ブロックを使って以下のように書くと、上記を満たす権限設定を書くことが

元記事を表示

Railsチュートリアル10.2.3 演習1(フレンドリーフォワーディング)で詰まった件

Railsチュートリアル10.2.3 演習1(フレンドリーフォワーディング)で詰まったので、備忘録として残します。コードは基本チュートリアルのコピペ通りで、環境もすべてチュートリアルに従っています。

## 演習内容
> フレンドリーフォワーディングで、渡されたURLに初回のみ転送されていることを、テストを書いて確認してみましょう。次回以降のログインのときには、転送先のURLはデフォルト(プロフィール画面)に戻っている必要があります。ヒント: リスト 10.29のsession[:forwarding_url]が正しい値かどうか確認するテストを追加してみましょう。

## 最初に書いたテスト
“`ruby:users_edit_test.rb
test “successful edit with friendly forwarding” do
#追記前
# get edit_user_path(@user)
# log_in_as(@user)

#追記後
assert_equal session[:forwarding_url],

元記事を表示

【Rails】ActionMailerで作成したメールを簡単にプレビューで見る方法

## 環境
Rails 6.0.1
Ruby 2.6.3
PostgreSQL 11.16

## プレビューで見る方法

“`ruby
class UserRegisterMailer < ApplicationMailer default from: 'info@example.com' def registered_email(user) @name = user.name @email = user.email mail to: @email, subject: 'ご登録ありがとうございます' end end ``` ```UserRegisterMailer```なら```UserRegisterMailerPreview```という名前で```Preview```を作成。 ```Preview```では```registered_email```メソッドに引数を渡せないので注意。 ```ruby class UserRegisterMailerPreview < ActionMailer::Preview def regist

元記事を表示

【Rails】マイグレーション時に既存データも一緒に更新する方法

## 環境
Rails 6.0.1
Ruby 2.6.3
PostgreSQL 11.16

## 前提

“`Category“`モデルに“`code“`というカラムがあったが“`name“`を追加したい
その際、下記の既存データの“`code“`の値を“`name“`カラムに更新したい

“`ruby
Category.seed(:id,
{ id: 1, code: Category.code.ruby.value },
{ id: 2, code: Category.code.rails.value },
{ id: 3, code: Category.code.php.value },
{ id: 4, code: Category.code.laravel.value },
{ id: 5, code: Category.code.js.value },
{ id: 6, code: Category.code.java.value },
{ id: 7, code: Category.code.kotlin.value }

元記事を表示

【Rails】生SQLを書きそうになったらsanitize_sql_for_orderを検討しよう

## 環境
Rails 6.0.1
Ruby 2.6.3
PostgreSQL 11.16

##
UserモデルにPost作成日でnilが最後に来るようにソートするスコープがあったとき、
“`created_at_sort“`に入ってきた値が“`desc“`か“`asc“`で降順か昇順にソートしている。
“`order“`の中で生のSQLを書くことになってしまいセキュリティとしてあまり良くない。
あと美しくない。
“`models/user.rb
scope :sort_by_created_at, ->(created_at_sort) do
if created_at_sort == ‘desc’
eager_load(:posts)
.order(‘posts.created_at DESC NULLS LAST’)
.select(‘users.*’, ‘posts.created_at AS posts_created_at’)
else
eager_loa

元記事を表示

OTHERカテゴリの最新記事