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

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

railsでJSONファイルの値を分割して受け取る

railsでひとつのJSONで二つのテーブル分のデータを受け取った際の処理を書く際に手間取ったのでメモ。
## 受け取るJSONファイル
“`json:event.json
{
“category_id”: 1,
“name”: “TestEvent”,
“is_public”: true,
“description”: “テストイベントです”,
“proposed_at”: [
“2022-11-14T18:15:45.087+09:00”,
“2022-11-14T19:16:45.087+09:00”,
“2022-11-14T18:52:09.671+09:00”
]
}
“`
イベントの名前だったりそのイベントの候補日のデータ

## コントローラー側の処理
“`ruby:event_controller.rb
def event_params
params.require(:event).permit(
:category_id,
:name,
:is_public,
:des

元記事を表示

while文

# はじめに
while文を勘違いして覚えてしまったため、改めて覚え直すために記事に残す。

## while文

while 条件式 do
実行する処理
end

条件式を満たす(true)間は処理が続く

元記事を表示

[Ruby] if、elseを用いた処理

# はじめに
rails初学者の者です。オンラインでプログラミングを学習させて頂いてるのですが、さらに理解を深めていきたいと思い、学習したことを備忘録として、残して理解を深めていきたいと思います。
また、間違った点など、ありましたら、ご指摘いただけると幸いです。よろしくお願いします。

# 指定された範囲の数値によって処理が異なるプログラムの実装
以下の要件を満たす、parrot_troubleメソッドを実装していきます。

最近、あなたはオウムを飼いはじめました。しかし、近隣から「夜にオウムの鳴き声がうるさい」と苦情がくるようになりました。あなたはこれをシステムで解決しようと考え、次のようなプログラムの要件を考えました。

・第一引数にオウムが鳴く場合はtrueを指定し、鳴かないfalseを指定する
・第二引数には時間を指定する(ただし、「分」は考えないものとする)
・20時から翌朝7時までの間にオウムが鳴いた場合は「NG」と出力する(20時と7時は含まれない)
・上記以外の場合は「OK」と出力する

# 雛形
“`ruby
def parrot_trouble(talking,

元記事を表示

randメソッド

# はじめに
乱数の実装をする際に必要な知識を忘れないために記録に残す

## randメソッド
randメソッドで乱数を実装することができます。

# 使い方
rand(欲しい乱数の数)
randメソッドを使うと手軽に乱数を生成できます。randメソッドに引数として数を渡すと「0」から「渡した数 – 1」の間でランダムに数を返します。

rand(100) # => 0〜99の中から1つ整数をランダムに返す

rand(1..5) # => 1~5の中の整数を返す

元記事を表示

[Ruby]偶数値の取得するメソッドの作成

# はじめに
rails初学者の者です。オンラインでプログラミングを学習させて頂いてるのですが、さらに理解を深めていきたいと思い、学習したことを備忘録として、残して理解を深めていきたいと思います。
また、間違った点など、ありましたら、ご指摘いただけると幸いです。よろしくお願いします。
# even?メソッド
Rubyが元々用意しているメソッドで、対象の数値が偶数かどうか判断するメソッドになります。

“` even?.rb
10.even?
#=> true

5.even?
#=> false

“`
このように値が真の時、tureを返し、偽の時、falseを返します。
# 偶数値が取得できるメソッドの作成

“` even?.rb
count_evens([2, 1, 2, 3, 4]) → 3
count_evens([2, 2, 0]) → 3
count_evens([1, 3, 5]) → 0
“`
このように出力できるメソッドを作成していきます。

“`even?.rb
def count_evens(nums)
count = 0
nums.each

元記事を表示

パスワードリセット機能の実装

# パスワードリセット機能の実装

## 実装
1完成イメージを掴む

http://localhost:3000/loginの「パスワードをお忘れの方はこちら」のリンク以降を実装
・config/routes.rbにリンクの追加

2リンクを押した後はパスワードリセット申請画面を表示
.controllerおよびviewの追加

3メールアドレスを入力して、送信すると、パスワード再発行メールを送信
.Mailerを追加
.ControllerでMailerを実行
.完了後はメッセージ付きでトップページにリダイレクト

4メールからパスワードリセット用のリンクに遷移
・config/routes.rbにリンクの追加
.controllerおよびviewの追加

5パスワードリセット用の画面でフォームにパスワードと確認用パスワードを入力して、更新するボタンを押すことでパスワードを変更
.Controllerの追加
.完了後はメッセージ付きでトップページにリダイレクト

6更新したパスワードでログインできることを確認

より詳しいな流れは[こちら](https://osamudaira.c

元記事を表示

railsチュートリアル中にHerokuの無料期間が終わることが分かり、Herokuからrender.comに気合いで移行した話

## 概要
タイトル通り
5章やってたら突然無料終わります言われて泣いちゃった
## 対応内容
下記様を参考にデプロイ手前まで作業完了。
[Render.comでRailsアプリの本番環境を作成する方法をどこよりも優しく伝える!](https://qiita.com/ysk91_engineer/items/b7db950f4739fa896f57)
[Render.com公式](https://render.com/docs/deploy-rails)

設定をしていくうち、`config/master.key`が必要とわかる。
その際、現在の`Gemfile`のrailsのバージョンではダメなことが分かり。
以下の様に`Gemfile`を設定変更
“`ruby
source ‘https://rubygems.org’

ruby “2.6.8” #念のためrender.comがこのバージョンの為、変更

gem ‘rails’, ‘= 6.0.3.2’ #updateしたら怒られたので怒られた通りに変更
gem ‘bootstrap-sass’, ‘3.3.7’

元記事を表示

Error: error:0308010C:digital envelope routines::unsupported の解決策

## 状況
“`
rails webpacker:compile
“`
このコマンドを実行しようとした。

## エラーログ
“`
Error: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:71:19)
at Object.createHash (node:crypto:140:10)
at module.exports (/Users/***********/Desktop/rails_tuning_sample_app/node_modules/webpack/lib/util/createHash.js:135:53)
at NormalModule._initBuildHash (/Users/***********/Desktop/rails_tuning_sample_app/node_modules/webpack/lib/NormalModule.js:417:16)
at handl

元記事を表示

ajax通信を用いて非同期でコメント機能を実装する

ほとんど私が書くことはないのですが、こことここの記事を参考にさせていただいたら簡単に実装できたよ!
ということで備忘録。
ajax通信を用いて非同期でコメント機能を実装するには、こちらの方のページが私にはとてもわかりやすかったです。(コメント欄も参考にされてください)
https://qiita.com/miyazaki_yusuke/items/dd1c053851a042cae893

そして、コメント欄も含めて余さず実行したけどうまくいかないぞ・・・?と思った時に、「そうだ!jQueryの実装してない!」となり外部検索でgemがあることを知り導入。けどうまくいかない。のでさらに検索したところ、こちらの方の記事で救われました。
https://qiita.com/tatsuhiko-nakayama/items/b2f0c77e794ca8c9bd74

素晴らしい方がたくさんいてよかった・・・
先人の方の知恵は偉大です。

元記事を表示

Active RecordでUNIONする方法

## はじめに
Active Recordでは `union` メソッドは提供されていません。ですが、運用上どうしても UNION したい場合はどうすればいいのか調査を行い培った知見をまとめます。

## 前提
* 以下の環境を利用します
* `Rails 7.0.3.1`
* `Active Record 7.0.3.1`

## UNIONする方法
1. `active_record_extended` gemを `bundle install` する
https://github.com/GeorgeKaraszi/ActiveRecordExtended

2. `active_record_extended` gem で提供されている `union` メソッドを利用する

以下のように簡単にUNIONのSQLが発行できます。

“`ruby
irb(main):001:0> Author.union(Author.where(id: 2), Author.where(name: ‘Yoko Sato’))
Author Load (3.6ms) SEL

元記事を表示

Railsで下書き機能の作成を行った

今回はRailsで下書き機能の作成ついて紹介します。

### displayカラムの追加

今回は下書き記事かどうかを判断するために、displayカラムを追加します。
add columnコマンドなどを使ってみます。

“`ruby
#db/migrate/20220928135436_add_coumuns_to_posts.rb
class AddCoumunsToPosts < ActiveRecord::Migration[6.1] def change add_column :posts, :display, :string end end ``` そしてmigrateします。 ```ruby rails db:migrate ``` 次にコントローラーを記述します。 内容としては、1だったときは、0にし、elseだと逆に処理をします。 0が下書き、1が投稿です。 ```ruby #posts_controller.rb def draft @post = Post.find(params[:id]) if @post.d

元記事を表示

【Ruby on Rails】Active Storageの導入方法

# Active Storageの導入方法

ImageMagick:
画像の作成やサイズ変更、保存形式の変更ができる。Gemではなく、ソフトウェア。
MiniMagick:
ImageMagickの機能をRubyで扱えるようにしてくれるGem。
ImageProcessing:
MiniMagickでは提供できない、画像サイズを調整する機能を提供するGem。

## Active Storageを使用する為に必要なツールのインストール
### ImageMagickのインストール

“`terminal:ターミナル
brew install imagemagick
“`
### MiniMagickとImageProcessingのインストール

Gemfile最終行に以下を追記
“`ruby:Gemfile
gem ‘mini_magick’
gem ‘image_processing’, ‘~> 1.2’
“`

“`terminal:ターミナル
bundle install
“`

以上でActive Storageを使用す

元記事を表示

【Ruby on Rails】pry-rails導入方法

## pry-railsの導入方法

### Gemfileを編集
Gemfile最終行に以下を追記
“`ruby:Gemfile
gem ‘pry-rails’
“`

### ターミナル実行
“`terminal:ターミナル
bundle install
“`

#techcamp136期

元記事を表示

【Ruby on Rails】Deviseの導入方法

## Deviseの導入方法

### Gemfileを編集
Gemfile最終行に以下を追記
“`ruby:Gemfile
gem ‘devise’
“`

### ターミナル実行
“`terminal:ターミナル
bundle install
“`

### deviseの設定ファイルを作成
“`terminal:ターミナル
rails g devise:install
“`

### Userモデルを作成
“`terminal:ターミナル
rails g devise user
“`

### テーブルを作成
「db/migrate/20XXXXXXXXX_devise_create_users.rb」ファイルに必要なカラム情報を追記のうえ以下を実行。
“`terminal:ターミナル
rails db:migrate
“`

### ビューファイルを作成
“`terminal:ターミナル
rails g devise:views
“`

#techcamp136期

元記事を表示

nil?、empty?の使い分け

# 一応自分用です。備忘録として残します。なので結論は出てません。

## nil?
“`rb
変数.nil?
“`
Rubyの標準メソッド。nilの場合のみtrueを返し、それ以外はfalse

### 下の時に使うのかな。
“`rb
irb(main):001:0> a = Model.find_by(id: 100)
TRANSACTION (0.2ms) BEGIN
Plant Load (0.7ms) SELECT `models`.* FROM `models` WHERE `models`.`id` = 100 LIMIT 1
=> nil
“`
## empty?
“`rb
変数.empty?
“`
Rubyの標準メソッド。空の文字列や空の配列の場合にtrueを返す。nilに対して呼び出すとNoMethodErrorが発生
### したの時に使うのかな。
“`rb
irb(main):007:0> a = Model.where(“column LIKE ?”, “#{Date.today.year}-#{Date.today.month}

元記事を表示

mysqlが起動しない

# 環境
macOS Monterey(12.6)
MySQL 8.0.29(Home Brew)

# 現象
Mac本体を再起動したらrails sでサーバの起動ができなくなりました。
MySQLを単体で起動させようとしても
「ERROR! The server quit without updating PID file」というのが出ます。
(PID fileが無いというのは直接的な原因ではない)
“`sh:
$ mysql.server start
Starting MySQL
./usr/local/Cellar/mysql/8.0.29_1/bin/mysqld_safe: line 199: 33199 Abort trap: 6 env MYSQLD_PARENT_PID=33088 nohup /usr/local/Cellar/mysql/8.0.29_1/bin/mysqld –basedir=/usr/local/Cellar/mysql/8.0.29_1 –datadir=/usr/local/var/mysql –plugin-di

元記事を表示

findメソッドで複数を指定

# テーブルの全てのレコードを表示
“`rb
irb(main):001:0> User.all
TRANSACTION (0.1ms) BEGIN
User Load (0.4ms) SELECT `users`.* FROM `users`
=>
[#,
.
.
.
#

元記事を表示

Railsでenum使用時にsyntax error, unexpected local variable or method, expecting =>

# 環境
* Ruby3.1.2
* Rails6.1.7
# 問題
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2729380/0ed233ae-e117-d8b3-e49f-02ea8e1408a5.png)
Railsでアプリ作成中にenumを使っていてmodelにenumの記述を加えて動作確認しようとしたらエラーが出た。解決策がわからず、検索しても記事が出てこなかった。
# 解決方法
## 解決方法①
“`diff_ruby
– enum period: { 1限: 0, 2限: 1, 3限: 2, 4限: 3, 5限: 4, オンライン: 5 }
# 数字を半角から全角に変更
+ enum period: { 1限: 0, 2限: 1, 3限: 2, 4限: 3, 5限: 4, オンライン: 5 }
“`
とすると![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2729380

元記事を表示

【Rails】Twitterクローンを作ってみた 〜コメント機能の作成〜

## はじめに
[【Rails】Twitterクローンを作ってみた 〜ツイート機能編〜](https://qiita.com/bloom__fu/items/975432a9aae39dae958f)の続きです。こちらを前提に進めていきますので、まだご覧になっていない方はそちらからご覧ください!※こちらはdockerでの環境構築を省きます。
## サービス環境
– ruby 3.0.0
– Rails 6.0.4
– docker
– mysql 8.0.2
– Slim, SCSS

## コメント機能作成
#### 条件
– TweetをクリックでそのTweetのコメントが見られる(コメントページ)
– コメントページの「コメント」をクリックでコメント新規作成に遷移できる
– コメントを投稿するとコメントページにリダイレクト
コメントモデルの作成し、Userモデル, Tweetモデルとコメントを関連付けさせてください。コメントもTweet同様140文字までとします。また、コメントモデルのテキスト部分のカラム名はtextとしてください。
#### 実装流れ(簡略)
① Userモデル

元記事を表示

【脱JQuery】モダンなJSの書き方

# はじめに

普段、Ruby On RailsでMPA(マルチページアプリケーション)による開発をメインに行っています。
最近「JQueryを使わない」という話しをチラホラ見かけるようになりました。その辺を調べていくうちに自分も「JQueryを使うのやめよう」と思いました。しかし、JQueryに慣れてしまっていて、プレーンなJSで書く方法がパッと出てこなかったので、その辺りを備忘録としてまとめてみました。

# JQueryでよく使っていた機能

自社内のプロダクトでJQueryの利用状況をざっと見たところ、利用されている機能としては次のものが多かったです。

– セレクタ
– Ajax
– イベント
– ループ

それぞれプレーンJSでの記述例を書いておきます。

# 単一セレクタの例

##### JQuery
“`js
const title = $(“#title”);
“`

##### プレーンJS
“`js
const title = document.querySelector(“#title”);
“`

# 複数セレクタとループの例

##### JQ

元記事を表示

OTHERカテゴリの最新記事