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

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

Docker環境のRuboCopのインストール手順と具体的な使い方

Rubocopとは

RuboCopとはRuby用のLintツールです。
設定ファイルを編集することでコーディングスタイルのチェック項目をカスタマイズできたり、RuboCop用のgemを追加することで機能の拡張ができたりします。
コードに対して行われるさまざまなチェックをRuboCopではCopと呼びます。

環境

Docker 20.10.6
ruby 3.0.2
rails 6.1.4

Railsプロジェクトにrubocopを導入する手順

####Gemのインストール

`rubocop`をGemfileに追加します。また、Railsアプリケーションでrubocopを利用する際によく導入されている`rubocop-performance`、`rubocop-rails`、`rubocop-rspec`もあわせて追加します。

“`ruby:Gemfile
group :development do
gem ‘rubocop’, require: false
gem “rubocop-performance”, require: false
ge

元記事を表示

The `development` database is not configured for the `development` environment.の解決法

HerokuにpushしてからHeroku openした時に出てきたエラーです。

エラー

“`
The `development` database is not configured for the `development` environment.
“`

原因

database.ymlのインデントが間違えているから

解決

“`ruby:database.yml
# MySQL. Versions 5.5.8 and up are supported.
#
# Install the MySQL driver
# gem install mysql2
#
# Ensure the MySQL gem is defined in your Gemfile
# gem ‘mysql2’
#
# And be sure to use new-style password hashing:
# https://dev.mysql.com/doc/refman/5.7/en/password-hashing.html
#
default: &d

元記事を表示

Rails on ECS Fargateでタスクロールを使ってS3にアクセスする

# 背景

FargateコンテナからS3バケットにアクセスしたかったのだが、アクセスキーをコンテナに入れるのはアンチパターン的な話を聞いていたので、AWSオススメ的にECSのタスクロールを使ってアクセスできるように構成したかった。
しかしActiveStorageの本家サイトを見ても、アクセスキーを設定する方法しか紹介されておらず、いろいろ調べたのだがドンピシャの情報が見つからず、ドハマリしたので防備録を書く。

## 通常

`config/storage.yml`に以下のように書くようになっている。

“`config/storage.yml
amazon:
service: S3
access_key_id: “”
secret_access_key: “”
region: “”
bucket: “”
“`

`access_key_id` `secret_access_key`を省略すれば勝手にタスクロールを利用してつながってくれると思い、以下のように設定した。

“`config/storage.yml
amazon:
service: S3

元記事を表示

Railsでポートフォリオ作成 設計編 ①

#開発工程
おおざっぱに開発の各工程の流れをこんな感じにします。

要件定義

設計(画面設計、DB設計)

実装

herokuにデプロイ

dockerとAWSを導入

AWSにデプロイ

実装完了

次に開発するアプリケーションの仕様を決めていきます。

#要件定義

【サイト名】
フーデリオンライン

【コンセプト】
フードデリバリー配達員の情報交換や交流を目的としたサービス

【サービスの開発に至るまでの背景】
私自身、2社フードデリバリーで働いていた経験があり、出来高制ということもあり、注文が来なくて稼げない時期がありました。
一般的な会社だったら上司に仕事のコツを教えてもらえたりすると思いますが、完全個人のこの仕事では基本的には自分でコツを見つけていくしかありません。
そんな中で、配達員同士がもっと気軽に情報交換ができるサービスがあったらいいなと考え、このサービスを開発することにしました。

【言語・フレームワーク】
・Ruby / RubyonRails 6

【開発環境】
ローカル

【機能一覧】
・ユーザー登録機能
・ユーザーログイン機能
・投稿機能

元記事を表示

Rails 掲示板一覧機能 解説

Rails 掲示板一覧機能 手順 (自分用)

#Bordモデルを作成する

“`:ターミナル
$ bundle exec rails generate model board title:string body:text user:references
“`
・モデルとマイグレーションファイルが作られる。
・掲示板を作るにあたってBordモデルを作る。その際に「user:references」をつけることで、Userモデルを参照してくれるようになる。(Bordモデルには「belongs_to :user」が追加され、マイグレーションファイルには、「t.references :user, foreign_key: true」が追加される。*後で説明)

#BoardモデルとUserモデルの関連付けと、バリデーションの設定

“`rb:app/models/user.rb
has_many :bords, dependent: :destroy
“`
・has_manyはテーブル同士を関連づけるもの。そのクラス(ここではUser)のidを外部キーとして抱える他のクラス(ここで

元記事を表示

scaffold で出来るよくわからんコード

今まで見て見ぬふりしてきたけど
scaffold で出来るコントローラー内のよくわからないコードに
真剣に向き合ってみた

“`
status: :unprocessable_entity
“`

https://developer.mozilla.org/ja/docs/Web/HTTP/Status/422

文法は正しいからエラーがださない。ただ失敗したという意味

“`
status: :created, location: @blog
“`

https://developer.mozilla.org/ja/docs/Web/HTTP/Status/201

新しくデータベースに追加した(リソースを作成した)
内容は `location` にいれておく
という意味

“`
head :no_content
“`
https://developer.mozilla.org/ja/docs/Web/HTTP/Status/204

処理は成功したけど特に返す情報はないという意味

“`
head
“`
これは HTTPリクエストではなく `render` と

元記事を表示

レイアウトテンプレートについて!

#①.結論!

アプリケーションのビューファイルの共通部分をまとめたものです!

レイアウトテンプレートに、headの情報やヘッダー、フッターなどのすべてのビューで共通となる部分を記述しておくことで、各テンプレートファイルは個別の見た目を記述するだけでよくなります!

Railsの場合、application.html.erbというファイルがレイアウトテンプレートとなります!

#②. yieldメソッド

“`php:例】app/views/layouts/application.html.erb



TestLesson
<%= csrf_meta_tags %>
<%= csp_meta_tag %>

<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_pack_tag 'applicatio

元記事を表示

railsチュートリアル第11章 AccountActivationのデータモデル

###AccountActivationのデータモデル
“`
ubuntu:~/environment/sample_app (account-activation) $ rails generate migration add_activation_to_users activation_digest:string activated:boolean activated_at:datetime
Running via Spring preloader in process 4751
invoke active_record
create db/migrate/20211017043743_add_activation_to_users.rb
“`
####Activationトークンのコールバック
####アカウント有効化用の属性とインデックスを追加するマイグレーション
db/migrate/[timestamp]_add_activation_to_users.rb

“`rb
class AddActivationToUsers < Acti

元記事を表示

railsチュートリアル第11章 AccountActivationsリソース

#アカウントの有効化
アカウントを有効化するステップを新規登録の途中に差し込むことで、
本当にそのメールアドレスの持ち主なのかどうかを確認できるようにしてみます。

・ユーザーの初期状態は「有効化されていない」(unactivated)
・ユーザー登録が行われたときに、有効化トークンと、それに対応する有効化ダイジェストを生成
・有効化ダイジェストはデータベースに保存しておき、有効化トークンはメールアドレスと一緒に、ユーザーに送信する有効化用メールのリンクに仕込んでおく
・ユーザーがメールのリンクをクリックしたら、アプリケーションはメールアドレスをキーにしてユーザーを探し、データベース内に保存しておいた有効化ダイジェストと比較することでトークンを認証する。
・ユーザーを認証できたら、ユーザーのステータスを「有効化されていない」から「有効化済み」(activated)に変更
##AccountActivationsリソース
セッション機能(8.1)を使って、アカウントの有効化という作業を「リソース」としてモデル化することにします。

“`
$ git checkout -b accoun

元記事を表示

railsチュートリアル第10章 destroyアクション ユーザー削除のテスト

###destroyアクション
destroyアクションへのリンクを追加

####ユーザー削除用リンクの実装(管理者にのみ表示される)
app/views/users/_user.html.erb

“`html

  • <%= gravatar_for user, size: 50 %>
    <%= link_to user.name, user %>
    <% if current_user.admin? && !current_user?(user # 現在のユーザーが管理者のときに限り [delete] リンクが表示 | <%= link_to "delete", user, method: :delete # DELETEリクエストを発行するリンクの生成は、 #  method: :deleteによって行われている data: { confirm: "You sure?" } %>
    <% end %>
  • “`

    ####実際に動作するdestroyアクショ

    元記事を表示

    where メソッドに配列を渡すとインスタンスを配列で返してくれる

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

    ## 本題

    `where` メソッドは `each` とか使わなくても
    配列を入れたら
    中の要素をすべて処理してくれる

    “`
    @searching_task_id = Combination.where(label_id: params[:task][:label_name].to_i).pluck(:task_id)
    “`
    “`
    @irb(#):002:0> @searching_task_id
    => [2333, 2334, 2335]
    “`
    上のように配列の入った変数を利用して
    データベースから
    レコードを引っ張るためには

    “`
    @tasks = Task.where(id: @searching_task_id)
    “`
    “`
    @tasks
    => #

    元記事を表示

    コールバックの際に使う self について

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

    ## 前提
    ユーザーの認証機能をつけているアプリ
    ユーザーに boolean 型で admin というカラムをつけ、admin が true のユーザーを管理者としている

    ## 本題

    管理権限を持ったユーザーがが0人にならないようにする
    バリデーションの機能実装

    “`
    class User < ApplicationRecord before_destroy :admin_exist_check before_update :admin_update_exist has_many :tasks, dependent: :destroy # 中略 def admin_exist_check if User.where(admin: true).count <= 1 && self.admin == true (←ここ) throw(:abort) end end def admin_update_exist if User.whe

    元記事を表示

    Rspecインストールの手順

    環境

    MacOS Big Sur11.5.2
    ruby 3.0.2
    rails 6.1.4
    docker 20.10.6

    Gemのインストール

    まずは Gemfile に`rspec-rails`と`rspec_junit_formatter`を追加します。
    本番環境では RSpec を使わないので、開発とテスト環境にのみ gem をインストールさせます。

    “`ruby:Gemfile
    group :development, :test do

    gem ‘rspec-rails’ # 追加
    gem ‘rspec_junit_formatter’ # 追加

    end
    “`

    そしてdocker-compose run web bundle installとdocker-compose buildをします。

    Rspecの基本設定

    以下のコマンドでRspecをインストールします。

    “`
    $ docker-compose run web rails g rspec:install
    “`
    Rspecの実行

    この段階ではまだ何もテストは書

    元記事を表示

    Could not find a JavaScript runtimeの解決法

    環境

    MacOS BigSur 11.5.2
    docker 20.10.6
    ruby 3.0.2
    rails 6.1.4

    エラー

    CircleCIでbuild中database setupにて引っかかりました

    “`
    ExecJS::RuntimeUnavailable: Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes.
    “`
    試したこと

    ①https://github.com/rails/execjs にアクセスし、`$ gem install execjs`を実行
    ②node.jsは元々入っていたがアンインストール、再度インストール
    ③Gemfileに`therubyracer`と`execjs`を追加、docker-compose run web bundle installまたはdocker-compose build

    複数の記事を調べ以上3つを試すもエラーは消えず。

    解決法

    元記事を表示

    【RSpec】Railsチュートリアル第6版 第9章

    #はじめに
    Railsチュートリアル第6版のテストをRSpecで書き直していく。

    ###目次
    – [第3章](https://qiita.com/supyolo888/items/35081ead2cfafb40a995)
    – [第4章](https://qiita.com/supyolo888/items/939b670b62eb18467f6d)
    – [第5章](https://qiita.com/supyolo888/items/42234ac2ed3919b14586)
    – [第6章](https://qiita.com/supyolo888/items/bd10e64c77fe391cf203)
    – [第7章](https://qiita.com/supyolo888/items/d2824ced26402b5f58d1)
    – [第8章](https://qiita.com/supyolo888/items/508caaa40edf307093ed)
    – 第9章(本記事)

    #Minitest

    ###2番目のウィンドウでユーザーをログアウトするテスト

    “`rb:tes

    元記事を表示

    where メソッドで複数のカラムから同時に検索する方法

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

    ## 本題
    複数のカラムの情報まとめてあいまい検索したかったら

    “`
    Task.where(“content LIKE ? or title LIKE ?”, “%#{params[:task][:search]}%”, “%#{params[:task][:search]}%”)
    “`

    こんな感じで2つのカラムと2つの条件式をいれることで
    まとめて検索できる。

    SQL のプレースホルダーが ActiveRecord の where メソッドでも使える

    それぞれの?の数と引数の数が一致しないとだめみたいなので、
    条件が同じなら上みたいにする

    参考にした記事

    https://rowingfan.hatenablog.jp/entry/2018/04/28/010000

    元記事を表示

    rspec date_field の値のテストが出来ない

    rspec のテストのとき date_field のフォームうまくテストできなかった

    ## 開発環境
    ruby 2.6.5
    Ruby on Rails 5.2.5
    rspec-rails (5.0.2)

    ## 本題

    “`:rspecのスクリプト
    fill_in “task[deadline]”, with: “2019-11-11”
    expect(page).to have_content “2019-11-11”
    “`

    日付の入力欄に `date_field` を使っている箇所があるんだけど
    そこのテストが上のコードでは上手くが出来ない

    細かく見てみると

    “`
    “2019-11-11”
    “`
    と入力している部分がエラー時には

    “`
    201911-11-
    “`
    と入力されてしまっている

    調べたら

    https://teratail.com/questions/301872

    上の記事で同じような質問があった

    再度

    “`
    fill_in “task[deadline]”, with: “002019-11-11”
    “`
    と書き直す

    確認の項目も

    元記事を表示

    railsとreactでtodoアプリを作る!(part5)

    # 作成するアプリについて
    railsとreactを用いたtodoアプリになります。
    https://todo-app-rails-react.herokuapp.com/todoes

    https://github.com/taiki-nd/todo-app

    (part1)

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

    (part2)

    https://qiita.com/taiki-nd/items/41230829bcedd73bdec4

    (part3)

    https://qiita.com/taiki-nd/items/14ff0faf685905532e0f

    (part4)

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

    # 開発環境
    * ruby3.0
    * rails6.1(rails6以上必須)
    * react17.0.2
    * vscode

    # アプリの作成手順

    1. サーバーサイドの実装
    1. アプリの作成
    1. t

    元記事を表示

    railsとreactでtodoアプリを作る!(part4)

    # 作成するアプリについて
    railsとreactを用いたtodoアプリになります。
    https://todo-app-rails-react.herokuapp.com/todoes

    https://github.com/taiki-nd/todo-app

    (part1)

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

    (part2)

    https://qiita.com/taiki-nd/items/41230829bcedd73bdec4

    (part3)

    https://qiita.com/taiki-nd/items/14ff0faf685905532e0f

    (part5)

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

    # 開発環境
    * ruby3.0
    * rails6.1(rails6以上必須)
    * react17.0.2
    * vscode

    # アプリの作成手順

    1. サーバーサイドの実装
    1. アプリの作成
    1. t

    元記事を表示

    railsとreactでtodoアプリを作る!(part3)

    # 作成するアプリについて
    railsとreactを用いたtodoアプリになります。
    https://todo-app-rails-react.herokuapp.com/todoes

    https://github.com/taiki-nd/todo-app

    (part1)

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

    (part2)

    https://qiita.com/taiki-nd/items/41230829bcedd73bdec4

    (part4)

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

    (part5)

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

    # 開発環境
    * ruby3.0
    * rails6.1(rails6以上必須)
    * react17.0.2
    * vscode

    # アプリの作成手順

    1. サーバーサイドの実装
    1. アプリの作成
    1. t

    元記事を表示

    OTHERカテゴリの最新記事