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

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

イベントclose機能を作ってみた(論理削除)

# やりたいこと
ポートフォリオとしてイベント投稿アプリを作成中イベントの開催日が過ぎたイベントの扱いをどうしようかと調べていたら論理削除の存在を知ったのでイベントを論理削除してイベントを閉鎖する機能を自作した。

# 機能要件
実装の前に今回の機能要件をまとめると、

## ① イベントの期日が過ぎたイベントを論理削除する
具体的には、

– イベントカラムにbooleanを持たせる
– 開催日が過ぎたイベントのbooleanの状態でViewの表示を変更する

## ② 論理削除はイベント期日が過ぎたら自動で実行
具体的には、

– イベント開催日が過ぎたらbooleanを変更するメソッドを定義
– そのメソッドをrakeタスクに登録
– rakeタスクを定期実行する

# 実装
それでは実装開始!

## ① イベントの期日が過ぎたイベントを論理削除する

### イベントカラムにbooleanを持たせる

命名は今回はstatusとしてデフォルトをfalseに設定する

“`ruby:コンソール
$ rails g migration AddStatusToEvents

元記事を表示

【RSpec】結合テストを実施した際に出たchromedriverに関するエラーの解消方法

#対象者

* chromedriverに関するエラーが発生している方
* RSpe結合テストを実施中の方
* JavaScriptのテストが不要な方
* GoogleChromeを使用中の方

#目的

* エラーを解消してRSpecテストを実行できるようにする

#実際の手順と実例
###1.前提

* RSpecテスト実装
* Ruby 2.6.3
* Rails 5.2.5
* Gemfileは下記の通り

““Gemfile.
:
:
group :test do
# Adds support for Capybara system testing and selenium driver
gem ‘capybara’, ‘>= 2.15’
gem ‘selenium-webdriver’
# Easy installation and use of chromedriver to run system tests with Chrome
gem ‘webdrivers’
gem ‘rspec-rails’
gem ‘factory_bot_

元記事を表示

railsチュートリアル第4章 ユーザークラス

####ユーザークラス

“`rb
class User
attr_accessor :name, :email

def initialize(attributes = {})
@name = attributes[:name]
@email = attributes[:email]
end

end

“`

“`rb
attr_accessor :name, :email
“`
ユーザー名とメールアドレス(属性: attribute)に対応するアクセサー(accessor) をそれぞれ作成
アクセサーを作成すると、そのデータを取り出すメソッド(getter)と、データに代入するメソッド(setter)をそれぞれ定義
インスタンス変数は常に@記号で始まり、まだ定義されていなければ値がnil

initializeは、Rubyの特殊なメソッドです。これは User.newを実行すると自動的に呼び出されるメソッド

“`rb
def initialize(attributes = {})
@name = attribute

元記事を表示

railsチュートリアル第4章 コントロールクラス

####コントロールクラス
クラスや継承を勉強してきた。

“`rb
lass StaticPagesController < ApplicationController def home end def help end def about end end ``` #####クラス階層を調べよう。 ```rb >> controller.class
=> StaticPagesController
>> controller.class.superclass
=> ApplicationController
>> controller.class.superclass.superclass
=> ActionController::Base
>> controller.class.superclass.superclass.superclass
=> ActionController::Metal
>> controller.class.superclass.superclass.superclass.superclass
=> AbstractCo

元記事を表示

[RSpec]コメント機能の単体テスト

# はじめに
本記事では、コメント機能の単体テストのコードや説明を記述します。

前回いいね機能について投稿しているので、こちらも参照ください。

https://qiita.com/mkato1013/items/3e36504e5f2648c91c88

## 前提
– コメント機能の実装ずみ
– 私は、投稿に対するコメントを実装しています。

# コード
早速ですが、コードを記述します。
初めの方のsleep 0.2は必要ありません。
自宅のWi-Fiがとんでもないぐらい遅いので記述しています。一応記事を添付します。

https://qiita.com/mkato1013/items/e7fd98978d90a0bad1a9

“`spec/models/comment_spec.rb
require ‘rails_helper’

RSpec.describe Comment, type: :model do
before do
user = FactoryBot.create(:user)
food = FactoryBot.create(:food

元記事を表示

deviseで作成したログインページのviewの編集が反映されない(メモ)

##事象詳細
devise導入後、Viewを編集して反映されていたのに何故か急に反映されなくなり、devise導入直後のようなレイアウトに戻ってしまった。


###試したこと
・rails server再起動
・`bundle install`
・DBのrollback、migrate
・PCの再起動

上記を何度繰り返しても改善されなかった


####ログを確認
`rails server`コマンドで立ち上げる際にターミナルのコマンドをよく見てみると、いつものrender先ではないことに気がついた

“`
Rendering layout /Users/*****/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/letter_opener_web-1.4.0/app/views/layouts/letter_opener_web/letters.html.erb
Rendering /Users/*****/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/letter_o

元記事を表示

VagrantでRuby on Railsの開発環境構築をしたメモ

# はじめに
– Railsをいじったことが少しありますが、改めて勉強し直したいと思い、Railsチュートリアルをやろうとするも、開発環境構築でかなり苦戦したので、自分用のリンクメモです。先人の皆様ありがとうございます‥!
– もっと良い方法など教えていただけると嬉しいです

# 環境
– macOS Catalina 10.15.7
– VirtualBox 6.1
– Vagrant 2.2.18
– Ubuntu 18.04
– Ruby 2.6.8
– Ruby on Rails 6.0.3
– rbenv 1.1.2-2-g4e92322

# 全体像
– この辺の図でやることのイメージがつきました。
– [VirtualBoxやVagrantを用いたRails開発環境の構築方法(前編)](https://thinkit.co.jp/story/2014/06/25/5072?nopaging=1)に載っています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2026906

元記事を表示

患者(ユーザー)ごとにindex表示したい whereを使う

1)患者(ユーザー)ごとにindex表示したい

“`

患者1 ーーー患者3の記録 患者2の記録のようになってしまった

“`
“`html:staff/record/index.html.erb
def index
@records = Record.all(params[:patient_id]).page(params[:page]).per(7).reverse_order
end
↓↓↓↓↓↓
def index
@records = Record.where(patient_id: params[:patient_id]).page(params[:page]).per(7).reverse_order
end
“`

ユーザーごとに投稿&自分の投稿一覧indexしか見えないのが正しい、 でも見えちゃう問題

“`
def index
@dialies = Dialy.all      
end
としていた。他のユーザー記録が見える….
“`

current_ where

元記事を表示

9.15振り返り  パスが飛ばせない、ユーザーごとの一覧表示できない問題

1)pathを確認して書いたのに動かない

=link_to “詳細”,staff_patient_record_path(patient_id,record.id)”%>でエラー

“`html:staff/record/index.html.erb
<%@records.each do |record|%>                                       エラー
:                                                                                           ↓↓↓
# =link_to “詳細を見る”,staff_patient_record_path(patient_id, record.id)”%>でエラー
:
<%end%>
“`

“`ターミナル
staff_patient_record GET /staff/p

元記事を表示

コントローラの使われ方がわかんない

MVCのことはちゃんと理解した方がいいから備忘録。

#1.コントローラとは
MVCモデルのC。ユーザーからのリクエストを受け取り、モデルを介してデータを授受したり、ビューを用いてHTML出力を生成するもの。
見方を変えると、コントローラはモデルとビューの仲介をしているとも取れる。モデルのデータをビューで使えるようにすることで、データをビューで表示したり、入力されたデータでモデルを更新したりする。

#2.コントローラの作り方
ターミナルにおいて下記のように入力して生成する。

“`ruby
% rails g controller (コントローラ名)
“`

コントローラの名前は複数形を使うことが一般となっている。
絶対ではないが遵守することで、既存のルーティングジェネレータがそのまま使えたり、名前付きのルーティングヘルパーの用法がアプリケーション全体で一貫する。

#3.メソッドとアクション
railsのコントローラは全てApplicationControllerを継承したRubyのクラスとなっている。例えば、SamplesControllerというコントローラがあったとして下

元記事を表示

本番環境でgoogle認証ログインができない時の解決方法

#はじめに
本番環境にて、google認証ログインを行った時以下のようなエラーが発生した。

#結論
原因としては、本番環境にclient_idが記述された.envが存在していないことだった。
本番環境にも.envを作成すると、google認証することができた。

しかし、自分は.envはgithubに上げないようにしているため、デプロイすると再び.envが読めなくなり、google認証できなくなってしまう。
そのため、デプロイ時に毎回.envを本番環境に作成しなくてもいいようタスクを作成した。

“`
#capfile
namespace :deploy do
desc “upload env”
task :sync_env do
on roles(:app) do |host|
upload!

元記事を表示

【web開発初心者】おすすめRuby on railsのUdemy講座まとめ。高コスパ講座を6つ厳選

webアプリのサーバーサイド開発に人気の高いRuby on RailsのオススメUdemy講座のまとめです。
数あるRoRの講座の中でも初心者に優しく評価が高いものだけを厳選しました。
Rubyの文法やweb開発(サーバーサイド)の経験が現時点で無くても大丈夫です。

## はじめてのRuby on Rails入門-RubyとRailsを基礎から学びWebアプリケーションをネットに公開しよう
おすすめ度:★★★★★
・[はじめてのRuby on Rails入門-RubyとRailsを基礎から学びWebアプリケーションをネットに公開しよう](https://px.a8.net/svt/ejp?a8mat=3BBPJR+AVR8TU+3L4M+BW8O2&a8ejpredirect=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fthe-ultimate-ruby-on-rails-bootcamp%2F)
### この講座で学べる内容
・Ruby on RailsとRubyを使った実践的な開発スキル
・Ruby on RailsとRubyの違いを理解

元記事を表示

ActiveHashのname出力でNoMethodError

おそらく同じケースに陥っている方は僅少かと思いますが
かなり初歩的なミスだったので
戒めも兼ねて記録します。

1. 問題
2. 状況
3. 分析
4. 解決法

#1. 問題
複数のActiveHashのname表示において
一部のモデルのみNoMethodErrorとなってしまっています。
[![Image from Gyazo](https://i.gyazo.com/ae9d438d9b1e7a0349ea7212683ca6b8.png)](https://gyazo.com/ae9d438d9b1e7a0349ea7212683ca6b8)

#2. 状況
・users/:idのパスにてusers#showアクション呼び出し
・ビューの項目のうち複数でActiveHashを利用(下記show.html.erb参照)
・一部の項目では正常にnameが呼び出される(下記ターミナル参照)

“`ruby:users/show.html.erb
<%= @user.nickname %>
—(略)—
<%= @user.sex.name %>
<%= @u

元記事を表示

[Rails6]削除ボタンが動作せず、アラートも動かず、削除ボタンを押すと参照してしまう問題の解決方法

# はじめに

「現場で使えるRuby on Rails5」で勉強している際に削除ボタンが動作しなく、エラーもなかったため少し沼にはまったので、解決までの過程を記録として残しておきます。(Javascriptについて分かって入れば楽に解決できることです)
# 前提・使用環境

・Windows 10
・Ruby 3.0.2
・Rails 6.1.4.1
・yarn 1.22.10

#コード
“`index.html.slim
h1 タスク一覧

= link_to “新規登録”, new_task_path, class: ‘btn btn-primary’

.mb-3
table.table.table-hover
thead.thead-default
tr
th = Task.human_attribute_name(:name)
th = Task.human_attribute_name(:created_at)
th
tb

元記事を表示

[Rails]MVCについて自分の言葉でまとめてみる

先日、RailsのMVCについて説明する機会があったときに、
(緊張も相まって)全く日本語にならず、
「言語化できないって理解してるつもりでも理解できてないってことだな」
と猛反省したので、全くRailsを知らない人にも伝わるように、改めてまとめてみることにしました。
誤っている部分などありましたらご指摘いただけますと幸いです。

#MVCとは
Model / View / Controller の頭文字をとってMVCです。
Railsなど、Webアプリケーションを作るときに使うフレームワークの多くが、
このMVCの構造によって成り立っています。

#Modelとは
そのアプリケーションのデータベースの窓口のようなものです。
基本的にはデータベースの各テーブルに一つあって、データベースとのやりとりをしてくれます。

#Viewとは
Webアプリケーションの見た目の部分です。

#Controllerとは
アプリケーションがどう動くかをここで決めています。
(ほとんどが)各Modelに紐づいていて、そのModelにまつわる動きをコントロールしています。

動きをコントロール:Modelに

元記事を表示

Rails: フォームでdata-remote=”true”を使うには

フォームに`data-remote=”true”`を付けたときの挙動について、ちゃんと理解していなかったので、ここにメモします。

ここらへんの機能はRails 7で[Hotwire(Trubo)](https://qiita.com/kazutosato/items/10a5bc04443d6b7e5bf8)で置き換わるようなので、いずれ無用な知識になるかもしれません。

## form_withとform_forのオプション

form_withにオプション`local: false`を付けます。すると、HTMLのformに`data-remote=”true”`が付きます。

“`erb
<%= form_with(model: @entry, local: false, id: 'entry-form') do |form| %>
“`

“`html

“`

Rails 6.0

元記事を表示

【Rails】Data Confirm Modal – backdrop

# backdrop とは

直訳すると劇場幕のことで、Webではモーダルを開いたときの背景の黒いところのことを言います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308256/92b710bb-801a-a907-c6a7-e9a50cffd2e3.png)

# backdropをクリックしてもモーダルが非表示にならない方法

“`javascript
dataConfirmModal.confirm({
title: ‘Are you sure?’,
text: ‘Really do this?’,
commit: ‘Yes do it’,
cancel: ‘Not really’,
zIindex: 10099,
onConfirm: function() { alert(‘confirmed’) },
onCancel: function() { alert(‘cancelled’) },
onHide: function()

元記事を表示

誰が入っても、 回るエンジニア組織を作るためにすべきこと

## 前書き
これまで数社エンジニア組織を見てきて、うまく回っている組織には特徴があると思ったので、まとめました。
良い会社に勤めてらっしゃる方は、このぐらいのこと普通にされていると思うのでスルーしてくださいw

# 目次
– 問題1: バグが出る
– 解決策1: 単体テストと総合テスト
– 問題2: レビューがしづらい
– 解決策2: yardコメント
– 問題3: 課題に対する具体的な解決策がない
– 解決策3 KPT振り返りをする

# 問題1: バグが出る

どんな時にバグが発生する?
– rebase
– merge
– 抽象化されたメソッドの変更
– ライブラリのバージョン変更
– 環境変数の欠損
– 機能追加によるソースコードの変更

### 悪い解決策
一人一人が注意する
※ このような解決策では属人的な解決策になってしまい、メンバーが抜けた時に、うまく回らなくなる。

## 解決策1: 単体テストと総合テスト
テストが大事だとはわかっているが、テストをしない理由は工数がかかるから。
ですが、それでバグ対応に追われたりする工数や、致命的なバグで顧客に迷惑をかける

元記事を表示

[RSpec]いいね機能の単体テストについて

# はじめに
本記事では、いいね機能のテストについて記述します。
いいね機能のテストコードを書いておりました。

## 前提
– いいね機能は導入済みです。
– 私が、実装している`いいね機能`は、`投稿した食べ物(food)`を`ユーザーが(user)`が`いいねする`ものになっています。

# コード
早速ですが、コードを記述します。
初めの方の`sleep 0.2`は必要ありません。
自宅のWi-Fiがとんでもないぐらい遅いので記述しています。一応記事を添付します。

https://qiita.com/mkato1013/items/e7fd98978d90a0bad1a9

“`spec/models/like_spec.rb
require ‘rails_helper’

RSpec.describe Like, type: :model do
before do
user = FactoryBot.create(:user)
food = FactoryBot.create(:food)
@like = FactoryBot.build(:l

元記事を表示

エラーメッセージの日本語化

#環境
ruby (2.6.5)
rails (6.0.0)
mysql2 (0.5.3)
#日本語化の設定
“`config/application.rb
module #App名
class Application < Rails::Application # 日本語の言語設定 config.i18n.default_locale = :ja end end ``` `config.i18n.default_locale = :ja`を追記。 #Gemfileの編集 ```ruby:Gemfile gem 'rails-i18n' ``` Gemfileの一番下に追記。 ``` bundle install ``` #日本語化用ファイル作成 localeファイルの中に日本語化用のファイルを作成し、英語を日本語に翻訳する。 下記サイトの記述内容をコピーし、作成したdevise.ja.ymlの中に貼り付ける。 [devise.ja.yml](https://github.com/tigrish/devise-i18n/blob/master/rails/locales/

元記事を表示

OTHERカテゴリの最新記事