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

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

rials6.1でmarkdownを使用したミニブログアプリを作ってみる

# 1. 開発環境
* M1 Mac Monterey 12.0.1
* ruby3.0
* rails6.1.4.1

githubはこちらです。

https://github.com/taiki-nd/markdown-blog

オリジナルアプリにActionTextかMarkdownかで迷ったのでミニアプリを作って比べてみることにしました。

https://qiita.com/taiki-nd/items/556b804fc367ba30ca15

# 2. 実装開始

## 2.1 アプリ作成、初期設定

まずは新しいアプリの作成をしていきます。
“rails _6.1.4.1_ new markdown-blog -d mysql“

database.ymlの編集をします。

“`ruby:config/database.yml
default: &default
adapter: mysql2
# encoding: utf8mb4
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS")

元記事を表示

Ruby、Railsのコーディング規則まとめ

#はじめに
企業や組織が公表しているRuby、Railsのコーディング規約をまとめました。チーム開発のように既にコーディング規約が定まっているのではなく、個人で開発している方は自分の好みの規約を導入してみてはいかがでしょうか?

![rails.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/764771/4659b6e3-d675-1bb5-9eb0-417521fda010.jpeg)

#企業

#Cookpad

https://github.com/cookpad/styleguide/blob/master/ruby.ja.md

#Shopify

https://ruby-style-guide.shopify.dev/

#Airbnb

https://github.com/airbnb/ruby

https://qiita.com/tomoharutt/items/51254ae5dafba645dc6d

#Rubyの組織など

#Rubyスタイルガイド

https://g

元記事を表示

サクッとRailsの開発環境をDockerで構築してみる

## 環境

– macOS Catalina 10.15.6
– Docker 20.10.10
– docker-compose 2.1.1

## DockerでRailsの開発環境を構築する

公式ドキュメントを参考にDockerでRailsの開発環境を構築する。
[Quickstart: Compose and Rails](https://docs.docker.com/samples/rails/)

### ファイルを作成する

以下のファイルを作成する。

“`bash
$ mkdir hello_app/
hello_app$ cd hello_app
hello_app$ touch Dockerfile
hello_app$ touch docker-compose.yml
hello_app$ touch Gemfile
hello_app$ touch Gemfile.lock
“`

“`docker:Dockerfile
# syntax=docker/dockerfile:1
FROM ruby:2.5
RUN apt-get update -q

元記事を表示

【Rails×Vue.js】日本語化した曜日を表示して紐づいたデータを表示する

https://qiita.com/Yuya-hs/items/6265f1aba1a73f38047a
の続きです。
上記記事の「準備」が済んでいる前提です。

曜日を表示して(月、火、水、木、金、土、日)、それに紐づいたデータをvueのテンプレートに表示する方法です。
テンプレート内にjavascriptのメソッドを記入することで実現します。

#実現したいこと

ユーザーが作成したanswerというモデルについて各曜日に何個のanswerを作成したか表示できるようにしたい。

完成イメージ(プログレスバーを使用しています)

![スクリーンショット 2021-11-14 23.00.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1640672/7fadbb8c-8273-4efa-f302-db9dcb577a5a.png)
スクリーンショット 2021-11-14 23.00.07

#rails側の実装

“`
//users_controller

def show
@wda

元記事を表示

sassc のインストールがおそすぎる

前々から思ってたけど `bundle install` のとき `sassc` のインストールがおそすぎる

そのせい `Docker` のイメージを作る際に タイムアウトエラーみたいになるのが頻発。

腹が立ったので調べた

## 開発環境
`ruby 2.6.5`
`Ruby on Rails 5.2.5`
`bundler 2.2.24`

https://qiita.com/croquette0212/items/d2f48f30c3ed7dcd0e3c

どうやら環境の問題ではなくこの `gem` が悪いらしい

上の記事を参考にさせていただいて

“`
gem ‘sassc’, ‘2.1.0’
“`

`sassc` のインストールと 2.1.0 というバージョンを明示してやると解決

元記事を表示

rSpec 複数のセレクターを所得して配列みたいに指定する

## 前提
`rSpec` を使ってテストを書いている

## 本題

複数の同じクラスがあってその特定の要素を使用したいとき

“`
find(“.class”)[0]
“`

みたいな書き方はできない

`find` メソッドは一意な要素しか所得しない

上みたいの書き方をしたかったら

“`
page.all(“.class”)[0]
“`

みたいにする

元記事を表示

kaminari のメソッドのレシーバーが配列のときどうするか

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

上の画像では右側のユーザーが `current_user` なんだけど
自身のアカウントは検索画面で表示されないようにしたかった

## 開発環境
`ruby 2.6.5`
`Ruby on Rails 5.2.5`

## 前提
`user` の認証機能があるアプリ
`slim` を使って書いている
`kaminari` のページネーションで `user` の一覧を表示している
検索機能を実装している

## next メソッド

まず考えたのは `next` メソッド

“`:user_html.slim
– @users.each do |user|
– if user == current_user
= next
“`
こんなかんじで繰り返し処理のなかで `current_user`

元記事を表示

rSpec all メソッドより page.all メソッドのほうがいい気がする

`ajax` な動作をテストしようとしたとき

“`
all(“input”)[0].set(“title1”
click_on ‘レビューを投稿する’
“`

みたいなテストを書いた。

このテストがとおったりとおらなかったり

適当に `speep` メソッドを散りばめても同じだった

## 開発環境
`ruby 2.6.5`
`Ruby on Rails 5.2.5`

## 前提
`rSpec` が導入されている
レビューを投稿するというボタンをクリックすると `ajax` でデータが反映される

## 結論

以下みたいにしたらうまくいくようになった

“`
page.all(“input”)[0].set(“title1”)
click_on ‘レビューを投稿する’
“`

`all` に `page` をつけてやる

推測なんだけど、`all` だけだと範囲がひろすぎて `set` メソッドの処理が追いついてないのかも
それならメソッド内での処理の話だから `sleep` メソッドをいれても関係なかったのもわかる

元記事を表示

railsチュートリアル第13章 ユーザーのマイクロポスト

#ユーザーのマイクロポスト
マイクロポストを作成する

##Micropostモデル

“`
$ git checkout -b user-microposts
“`

###基本的なモデル
Micropostモデルは、2つだけの属性だけを持ちます。
・マイクロポストの内容を保存するcontent属性
・特定のユーザーとマイクロポストを関連付けるuser_id属性

マイクロポストの投稿にString型ではなくText型を使っている
本番環境ではtext,String型にパフォーマンスの差はない。

####Micropostモデルを生成する
“`rb
ubuntu:~/environment/sample_app (user-microposts) $ rails generate model Micropost content:text user:references
# user:references UserとMicropostを関連付けする下準備
Running via Spring preloader in process 3829
invoke act

元記事を表示

railsチュートリアル第12章 パスワードの再設定をテストする

###パスワードの再設定をテストする
updateに関する4つ条件があった。
送信に成功した場合と失敗した場合の統合テストを作成します。
まずはパスワード再設定のテストファイルを生成しましょう。

“`
ubuntu:~/environment/sample_app (password-reset) $ rails generate integration_test password_resets
Running via Spring preloader in process 2918
invoke test_unit
create test/integration/password_resets_test.rb
“`

####パスワード再設定の統合テスト
test/integration/password_resets_test.rb

“`rb
require ‘test_helper’

class PasswordResetsTest < ActionDispatch::IntegrationTest def setup Ac

元記事を表示

railsチュートリアル第12章 パスワードを更新する

###パスワードを更新する
今回の場合はフォームから新しいパスワードを送信するようになっています。
フォームからの送信に対応するupdateアクションが必要になります。
updateアクションでは、次の4つのケースを考慮する必要があります。
1.パスワード再設定の有効期限が切れていないか
2.無効なパスワードであれば失敗させる(失敗した理由も表示する)
3.新しいパスワードが空文字列になっていないか(ユーザー情報の編集ではOKだった)
4.新しいパスワードが正しければ、更新する

####パスワード再設定のupdateアクション
app/controllers/password_resets_controller.rb

“`rb
class PasswordResetsController < ApplicationController before_action :get_user, only: [:edit, :update] before_action :valid_user, only: [:edit, :update] before_action :che

元記事を表示

rspec 画像が投稿できることをテストする 

`rSpec` で画像が投稿できることをテストする

##開発環境
`ruby 2.6.5`
`Ruby on Rails 5.2.5`

## 前提
`rSpec` が導入されていること
`test.jpg` がテスト用の画像

## 画像のテスト方法

① テスト用の画像を用意する
② テスト中にその画像をセットする
③ セットした画像のセレクターをテスト

https://study-diary.hatenadiary.jp/entry/2020/10/16/133144

こんへん参考にしながら

自分の場合は

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

こんな画像でテスト

コードは

“`
attach_file ‘inputFile’, “#{Rails.root}/spec/factories/test.jpg”, make_visible: true

元記事を表示

ActiveStorageでアップロードしたファイルをsidekiqで遅延少なく処理する(sidekiqのコードリーディング)

## やりたいこと(背景)
フロントエンドからファイルをActiveStorageでアップロードし、そのファイルを利用した処理を行う必要がある。
該当のファイルへの処理は数秒かかるためweb apiはすぐに返し、該当の処理を非同期実行することにした。
該当処理のOK / NGの結果に応じてユーザーに再度アップロード要求する必要があり、ユーザーには解析中という表示で待たせている。(処理に時間がかかりすぎた時の対応は別途検討してますが今回は省略)
サーバー処理が終わったらActionCableを利用してフロントに判定結果を返す。

![ファイルアップロード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280595/bfe20204-3c54-c8f5-0ee2-7b85a44b58a0.png)

![解析job.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280595/5e11f891-f19b-8de0-33d

元記事を表示

Rails 掲示板作成機能 解説

Rails 掲示板作成機能 手順 (自分用)

#Userモデルに、Boardモデルとの関連付けを追加

Userと関連付けて、掲示板を作成するため、UserとBoardのhas_many関連をモデルに定義。

“`rb:app/models/user.rb
class User < ApplicationRecord authenticates_with_sorcery! has_many :boards, dependent: :destroy validates :password, length: { minimum: 3 }, if: -> { new_record? || changes[:crypted_password] }
validates :password, confirmation: true, if: -> { new_record? || changes[:crypted_password] }
“`
###has_many :boards, dependent: :destroy
・has_manyはテーブル同士を関連

元記事を表示

rails6.1でActionTextやってみた

# 1. 開発環境
大まかには以下の通りです。
* M1 Mac
* ruby 3.0
* rails 6.1.4.1

:::note warn
ActionTextはrails6から使えるらしい
:::

https://github.com/taiki-nd/action-text

比較のためmarkdownを利用したアプリのリンクを貼っておきます。

https://qiita.com/taiki-nd/items/e436dd90700787cead1e

# 2. 実装開始

## 2.1 アプリの作成と初期設定
“rails _6.1.4.1_ new action-text -d mysql“
でアプリを作成。
“cd action-text“
で移動しておく。

“`ruby:config/database.yml
default: &default
adapter: mysql2
# encoding: utf8mb4
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5

元記事を表示

Rails + SQLでランキング機能を実装

はじめに

ランキング機能を実装するためにActive Recordを利用しようと調べましたが、要件に合うものがなかったため、SQLで実装しました。学習内容のメモとして記載いたします。

開発環境

– Mac
– Ruby 2.7.2
– Rails 6.1.3.1
– PostgreSQL 13.2

前提

現在、お菓子を止めたい人に向けた習慣化アプリを作成しており、そのアプリの一機能として、1ヶ月以内にお菓子を止めた日数でユーザごとのラウンキング機能を実装したいと考えました。ランキングを作成する元となるテーブルは以下となります。(本来はもっとカラムがございますが、今回使用しないカラムにつきましては省略しております。)

![demo](https://gyazo.com/c9b10f4dfaf6765ac17994327a809f5e/raw)

実装

ランキング機能の要件は以下の通りです。

– 1ヶ月以内でお菓子を止めた日数の算出方法は以下の通り。
本日 – 月初(もし、月初以降にアプリを使い始めた場合、アプリを使い始めた日) – お菓子を食べて

元記事を表示

【個人開発】不幸な体験を暴露してお金をもらうアプリを作ってみた

## はじめに

![ogp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684591/68e8d2f2-12c2-fd10-00f7-8c137a2dbc94.png)

皆さんにお聞きします。
何か不幸な体験をして、それを友達や家族に話したとき、一度は「同情するなら金くれよ!!」と思ったことあるのではないでしょうか?

そんな不幸な体験をされた人たちが「少しでも報われたら」という思いで~~クソ~~アプリを作りました。

https://fuko-ziman.herokuapp.com

## アプリの使い方
自分が体験した不幸を投稿し、twitterでシェアします。
「みんなの不幸一覧」を押すと、投稿された記事を全て見ることができます。

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

元記事を表示

変数の命名規則について!

#変数の命名規則

前回の続きです!

変数には名前をつけることができます!

名前は自由に決められますが、一定のルールがあり、それを守らなくてはいけません!

“`php
命名規則 説明

1,変数の中身が何かわかる! どんな名前もつけられますが,aaaのような意味のない名前は避けましょう!

2,小文字で始める! 大文字からも開始できますが、とくに理由がない場合は避けましょう!

3,_(アンダーバー)で始めない! _からも開始できますが,とくに理由がない場合は避けましょう!(2文字目以降には使えます!)

4,数字で始めない! 1文字目に使うとエラーが生じます!(2文字目以降には使えます!)

5,日本語を使わない! 文字列以外では日本語は使えないため,変数名も日本語は使えません!

6,スペースを含めない! 名前にスペースが入るとエラーが生じます!

7,予約語

元記事を表示

railsチュートリアル第12章 パスワードを再設定する

##パスワードを再設定する
次はPasswordResetsコントローラのeditアクションの実装を進めていきましょう。
統合テストを使ってうまく動作しているかのテストも行っていきます。
###editアクションで再設定
今回はこのメールアドレスを保持するため、隠しフィールドとしてページ内に保存する手法を使い作成
####パスワード再設定のフォーム
app/views/password_resets/edit.html.erb

“`html
<% provide(:title, 'Reset password') %>

Reset password

<%= form_with(model: @user, url: password_reset_path(params[:id]), local: true) do |f| %>
<%= render 'shared/error_messages

元記事を表示

railsチュートリアル第12章 送信メールのテスト

###送信メールのテスト

####パスワード再設定用メイラーメソッドのテストを追加する
test/mailers/user_mailer_test.rb

“`rb
require ‘test_helper’

class UserMailerTest < ActionMailer::TestCase test "account_activation" do user = users(:michael) user.activation_token = User.new_token mail = UserMailer.account_activation(user) assert_equal "Account activation", mail.subject assert_equal [user.email], mail.to assert_equal ["noreply@example.com"], mail.from assert_match user.name, mail.body.enc

元記事を表示

OTHERカテゴリの最新記事